有时,我的网站上的一些请求开始挂起会话模块的RequestAcquireState状态。当螺旋开始时,所有请求都会超时,我们需要在受影响的服务器上重新启动IIS。
我调查了很多,我得到的唯一结论是,当应用程序试图访问存储在会话中的用户数据时,不知何故发生了死锁。
我能想到的解决这个问题的唯一选择就是减少或停止在我的应用程序中使用Sessions。这肯定是计划的一部分,但我们需要一段时间才能完成。
我们使用IIS7.5运行6台机器,在我们的负载平衡中,进程StateServer和服务器亲和性处于打开状态。
关于如何在不完全删除Sessions的情况下解决或修复此问题,有什么建议吗?
发布于 2014-12-15 17:34:12
提供程序和会话模块(IIS会话模块)上都存在锁定机制。您可以开发自定义会话模块,但是您仍然需要没有锁定的提供程序,或者您可以开发没有锁定的自定义提供程序,但是您仍然需要IIS会话模块,并且在该级别上实现它并不那么简单。
解决方案是UnlockedStateProvider,也就是未锁定的
跟随白兔:P (查看演示项目,它解释了所有内容)。
发布于 2013-05-16 05:42:04
答案是.NET Framework4.5的热修复汇总2828841,这里有所有的解释:
http://forums.asp.net/t/1888889.aspx/2/10?Question+regarding+a+possible+bug+within+NET+4+5
它适用于IIS7.5Windows Server2008rs x64,asp.net web forms应用程序,有很多ajax请求。
发布于 2014-04-02 23:53:06
有没有可能这些用户有另一个长时间运行的请求,而您看到的堆积如山的请求实际上是次要请求?默认情况下,ASP.NET将锁定会话,直到请求完成。如果第二个请求在第一个请求完成之前进入,它将不得不等待。如果使用的是MVC,则可以通过向控制器添加属性来更改此行为。
SessionState(SessionStateBehavior.ReadOnly)
这使会话成为只读的,删除了允许处理后续请求的锁定行为。
https://stackoverflow.com/questions/16570855
复制相似问题