我喜欢在 IIS 7.0 (windows server 2008) 中托管 asp.net Web 应用程序。
我将会话状态配置为 sessionstate mode="inproc" timeout = 120。即使会话在 15 秒内到期。可能是什么问题呢?。
谢谢
我喜欢在 IIS 7.0 (windows server 2008) 中托管 asp.net Web 应用程序。
我将会话状态配置为 sessionstate mode="inproc" timeout = 120。即使会话在 15 秒内到期。可能是什么问题呢?。
谢谢
您可以在这两个区域检查您的连接超时。
或者
检查 Windows 事件日志以确保工作进程没有被强制回收。
您的代码中可能有一些东西会导致 Worker Process 强制自己进行循环,在这种情况下,当会话存储在 Proc 中时,它将丢失它所持有的所有会话值。
听起来会话超时在 web.config 中设置不正确,您可以尝试以下操作:
<system.web>
<sessionState timeout="2" />
将超时设置为 2 分钟
http://msdn.microsoft.com/en-us/library/h6bb9cz9(vs.71).aspx
Mmerrell 写了这个,是找到问题根源的关键:
检查 Windows 事件日志以确保工作进程没有被强制回收。
您的代码中可能有一些东西会导致 Worker Process 强制自己进行循环,在这种情况下,当会话存储在 Proc 中时,它将丢失它所持有的所有会话值。
查看“Windows 日志/系统”上的事件查看器,您正在寻找一个“WAS”源事件,其中包含如下描述:“一个进程 ID 为 '2980' 的工作进程为应用程序池 'SIAC' 服务已关闭,原因是不活动。应用程序池超时配置设置为 20 分钟。需要时将启动新的工作进程。” 这是您正在寻找的症状。
希望这可以帮助。
使用 SessionState 用 C# 编写的 HTTP 处理程序有几乎相同的问题。似乎属性 IsReusable 应该是假的,否则我正在运行会话松散的问题。
感谢Mmerrell的回应,这让我走上了正轨。
还有另一件事要检查 - 应用程序池高级设置 - 虚拟内存限制。看看它是否被明确设置 - 因为一旦超过设置的限制它可能会自动回收。特别是如果您在事件日志中看到错误,例如:
进程 id 为 '****' 服务应用程序池 'your-app-pool-name' 的工作进程已请求回收,因为它已达到其虚拟内存限制。