RequestAcquireState挂在.NET 4.5.1 IIS8上

时间:2016-09-08 10:59:43

标签: asp.net iis session-state iis-8 hang

在负载过重或使用jQuery的ajax中止功能时,我们会看到IIS中的请求已经建立到无人连接且整个站点挂起的状态,从而迫使回收。

similar post from 3 years ago与.NET 4.5和IIS 7.5有类似的问题,但微软已经声明这已在4.5.1中修复并发布了4.5的补丁。

Windows Server 2012R2在尝试使用State Server时使用IIS 8时出现此问题,在运行Windows 10和IIS10的开发计算机上使用State Server时更是如此。由于安装程序因4.5.1的存在而被阻止,因此无法在任何这些计算机上安装该修补程序。更改为In Proc可以减少问题的发生但不能完全解决问题。

今年在IIS论坛上的这个dead thread有一些其他人有同样的问题,但没有解决方案。我也尝试将UploadReadAheadSize设置为0,如其他地方所建议的那样,但没有解决问题。

是否有其他人经历过和/或找到了解决方案?任何意见都将不胜感激。

1 个答案:

答案 0 :(得分:0)

我们的问题似乎是由某人实施了这篇文章 Can I access session state from an HTTPModule? 中的建议引起的。

这似乎诱使 SessionStateModule 认为它需要加载 SessionState,即使最终将执行的处理程序没有标记为 IRequiresSessionState,暂时将其替换为一个。加载 SessionState 后,处理程序将交换回原始处理程序。我怀疑,但没有证明,如果请求被取消,SessionStateModule 不会释放锁,因为当时“在玩”的处理程序没有用 IRequiresSessionState 标记;因此无需清理。

在问题消失之前移除模块并标记不需要 IRequiresSessionState 的处理程序。