有没有什么方法可以在不锁定 ASP.Net MVC 站点的情况下使用会话?
Is there any way to work with sessions without locking on ASP.Net MVC site?
有什么方法可以在 ASP.Net MVC 站点上使用会话 而无需锁定 吗?
会话锁机制导致很多问题;
当您的站点速度变慢一点点时,用户开始敲击键盘"F5"。当他们这样做时,请求开始相互等待。所有这些请求在 IIS 上都处于 hanging 会话模块的“RequestAcquireState”状态。
如果用户同时发出请求,就会发生这种情况。因为 IIS 中的会话模块和默认会话提供程序(或者通常是自定义的)具有两种锁定机制。
参见:
存在锁定,因为如果您不仔细设计您的流程,您的工作流程可能会被操纵。与性能问题相比,被黑客入侵对您来说是个大问题...
但是如果你为共享的、半一致的状态存储设计你的流程,(或者可能根本不需要使用)我们可以删除锁定吗完全脱离我们的情况?
是的,我们可以使用“UnlockedStateProvider”移除锁。
它是为 MVC 设计的,并没有实现 .Net SessionStateStoreProviderBase,因为 IIS 会话模块也有锁定机制。
这是一个简单的 ActionFilterAttribute,通过 HttpContext 为您提供状态存储。
它还有 Redis 提供程序,因此您可以在网络场、Azure 或 AWS 中安全使用。
请看:
- https://www.nuget.org/packages/UnlockedStateProvider.Redis
- https://github.com/efaruk/playground/tree/master/UnlockedStateProvider
Note: Developed for advanced usage and not a replacement for any SessionStateProvider...
有什么方法可以在 ASP.Net MVC 站点上使用会话 而无需锁定 吗?
会话锁机制导致很多问题;
当您的站点速度变慢一点点时,用户开始敲击键盘"F5"。当他们这样做时,请求开始相互等待。所有这些请求在 IIS 上都处于 hanging 会话模块的“RequestAcquireState”状态。
如果用户同时发出请求,就会发生这种情况。因为 IIS 中的会话模块和默认会话提供程序(或者通常是自定义的)具有两种锁定机制。
参见:
存在锁定,因为如果您不仔细设计您的流程,您的工作流程可能会被操纵。与性能问题相比,被黑客入侵对您来说是个大问题...
但是如果你为共享的、半一致的状态存储设计你的流程,(或者可能根本不需要使用)我们可以删除锁定吗完全脱离我们的情况?
是的,我们可以使用“UnlockedStateProvider”移除锁。
它是为 MVC 设计的,并没有实现 .Net SessionStateStoreProviderBase,因为 IIS 会话模块也有锁定机制。
这是一个简单的 ActionFilterAttribute,通过 HttpContext 为您提供状态存储。
它还有 Redis 提供程序,因此您可以在网络场、Azure 或 AWS 中安全使用。
请看:
- https://www.nuget.org/packages/UnlockedStateProvider.Redis
- https://github.com/efaruk/playground/tree/master/UnlockedStateProvider
Note: Developed for advanced usage and not a replacement for any SessionStateProvider...