这是我目前的问题:
我猜测我的问题(如下所述)是由于 ASP.NET 工作进程被回收引起的,根据以下答案 - 我正在使用 InProc 会话存储,并且不太可能移动,因为对于其他类型的存储,所有会话对象都必须可序列化。但是,我无法弄清楚为什么工作进程会像我看到的那样经常被回收 - 据我所知,应用程序目录中的文件没有更改,并且 IIS 中的选项似乎意味着进程只会每 1,740 分钟回收一次 - 这比实际会话丢失频率要低得多。那么,我的问题现在是,除了会话超时外,还有哪些情况会导致 ASP.NET 工作进程被回收?
这是我的原始问题:
我在 ASP.NET Web 应用程序中遇到一个难以重现的问题。该应用程序具有一个主 .aspx 页面,加载并初始化多个会话变量。该页面使用 ASP.NET Ajax 的 Sys.Net.WebRequest
类重复访问另一个 .aspx 页面,该页面使用会话变量进行数据库查询并更新主页面(主页面从未重新请求)。
偶尔,在使用页面一段时间后,导致会话正确传递到子页面的成功 HTTP 请求之后,其中一个请求似乎会导致创建新的 ASP.NET 会话 - 所有会话变量都丢失(在我的代码中引发异常),并报告新的会话 ID 在动态请求的页面中。这意味着突然间,主页面与服务器断开连接 - 就服务器而言,用户不再登录。
我几乎可以确定这不是会话超时 - 超时时间设置为可笑的时间,使其发生的时间是可变的,但从不足以使会话超时,并且常量 Sys.Net.WebRequests
应该刷新会话计时器。
那么,还有什么其他可能会导致 HTTP 请求失去与 ASP.NET 会话联系的情况?不幸的是,当这种情况发生时,我没有嗅探网络流量,否则我会检查 ASP.NET 会话 cookie 是否存在。