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