IIS 7.5上的会话模块上挂起的请求

tuc*_*caz 21 asp.net timeout session-state httprequest iis-7.5

有时我的网站上的一些请求开始挂起Session模块的RequestAcquireState状态.当螺旋开始所有请求超时时,我们需要在受影响的服务器上重新启动IIS.

我调查了很多,我得到的唯一结论是,当应用程序试图访问存储在Session中的用户数据时,某种程度上发生了死锁.

我能想到解决此问题的唯一选择是减少或停止在我的应用程序中使用Sessions.这是计划的一部分,但在我们完成之前需要一段时间.

我们使用IIS 7.5运行6台机器,在我们的负载平衡中运行proc StateServer和服务器亲缘关系.

有关如何解决此问题的任何提示或完全修复它而无需完全删除Sessions?

IIS挂起进程

efa*_*ruk 6

提供程序和会话模块(IIS会话模块)上都存在锁定机制.您可以开发自定义会话模块,但仍然需要提供程序而不需要锁定,或者您可以开发自定义提供程序而不需要锁定,但仍需要IIS会话模块,并且在该级别实现并不是那么简单.

解决方案是UnlockedStateProvider [aka Unlocked]

跟着白兔:P(查看演示项目,它解释了一切.)


Rol*_*oCC 5

答案是.NET Framework 4.5的修补程序汇总2828841,这里所有的解释如下:

http://forums.asp.net/t/1888889.aspx/2/10?Question+regarding+a+possible+bug+within+NET+4+5

这里是下载链接

它适用于IIS 7.5 Windows Server 2008 rs x64,具有大量ajax请求的asp.net Web表单应用程序.


jar*_*ics 5

我今天才发现,如果您有一个运行时间较长的请求(在我的情况下是无限循环),那么所有后续请求都将被锁定,因为默认情况下ASP.NET会在会话上锁定。

因此,如果您的中有请求的用户,请RequestAcquireState检查其中是否有一个ExecuteRequestHandler锁定会话的请求,从而阻止其他请求的启动。

在这里讨论如何防止会话锁定。(基本上,将大多数页面创建为“会话只读”,并尽可能少地修改会话。)