请挂会话模块上IIS 7.5(Requests hanging on Session module

2019-09-03 10:39发布

不时,在我的网站一些要求开始挂在会议模块的RequestAcquireState状态。 当螺旋开始的所有请求暂停,我们需要重新启动受影响的服务器上的IIS。

我调查了很多,我得到的唯一结论是,不知何故,而应用程序试图访问存储在会话用户数据的僵局正在发生的事情。

我能想到的解决这个问题,唯一的选择是要么减少或停止在我的应用程序中使用会话。 这是definetely计划的一部分,但它会需要一段时间才可以完成这一点。

我们在我们的负载平衡运行6台机器与IIS 7.5,出PROC的StateServer和服务器的亲和力。

如何解决这个问题,或者修复它不惜一切,而不必完全删除会话任何提示吗?

Answer 1:

锁定机制提供商和会话模块(IIS会话模块)上存在。 您可以开发自定义会话模块,但你仍然需要供应商没有锁定,或者您可以开发自定义提供无锁,但你仍然需要IIS会话模块,它不是那么简单,在这一水平来实现。

该解决方案是UnlockedStateProvider [又名未锁定]

按照白兔:P(检查演示项目,它说明了一切。)



Answer 2:

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

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

这里的下载链接

它为我在IIS 7.5的Windows Server 2008和x64的RS,asp.net web表单与很多Ajax请求的应用。



Answer 3:

我今天刚发现,如果你有一个长期运行的请求(或在我的情况,一个无限循环),那么所有后续请求将被锁定,因为通过会话的缺省ASP.NET锁。

所以,如果你有在请求的用户RequestAcquireState ,然后检查是否有在请求ExecuteRequestHandler被锁定的会话,从而防止其他请求启动。

有在这里讨论如何防止锁定会话。 (基本上,创建大部分网页的的会话只读,并且很少,你可以修改会话)。



Answer 4:

是否有可能这些用户有另一个长期运行的要求,你会看到堆积如山的要求实际上是第二次要求? 默认情况下,ASP.NET会直到请求完成锁定会话。 如果第二个请求到达之前,第一个是完整的,它必须等待。 如果您正在使用MVC,您可以通过添加一个属性到控制器更改此行为。

[SessionState的(SessionStateBehavior.ReadOnly)]

这使得会议只读,移除锁定行为使后续请求进行处理。



文章来源: Requests hanging on Session module on IIS 7.5