在 ASP.NET 网站中,我们将会话存储在 SQL Server 中。一切正常,除了会话经常回收。我将超时时间设置为 30 分钟,但有时它会在几分钟内回收。我们有一个专用服务器,以及在“经典”应用程序池下运行的网站。我在这个问题上搜索了很多,但没有找到满意的答案。任何帮助将不胜感激。
注意:大多数情况下它发生在有很多使用视图状态的页面上,我很好奇是否有视图状态与会话回收的链接?
在 ASP.NET 网站中,我们将会话存储在 SQL Server 中。一切正常,除了会话经常回收。我将超时时间设置为 30 分钟,但有时它会在几分钟内回收。我们有一个专用服务器,以及在“经典”应用程序池下运行的网站。我在这个问题上搜索了很多,但没有找到满意的答案。任何帮助将不胜感激。
注意:大多数情况下它发生在有很多使用视图状态的页面上,我很好奇是否有视图状态与会话回收的链接?
当我们有一个网络农场(多个 Web 服务器为客户端提供服务)或一个网络花园(应用程序池中有多个工作进程)时,我们就遇到过这个问题。
如果您有一个 Web 农场,那么您需要确保所有 Web 服务器具有相同的机器密钥,并且所有实例具有完全相同的应用程序路径。
如果您有一个网络花园,请尝试将最大工作进程数降回 1 以查看是否可以解决问题。
在检查 IIS 设置时,您可能还应该确保应用程序池没有定期回收。这可能是由于应用程序池中指定的以下任何原因造成的:
1)私有内存限制(如果超过最大内存量,应用程序池将被重置)
2) 定期时间间隔回收(应用程序池在指定分钟数后自动回收,默认为 1740 和/或在特定时间)。
3) Idle Time-out(在应用程序池自动关闭之前可以经过的非活动分钟数)。
您还应该检查事件日志以获取有关应用程序池崩溃或以其他方式被回收的报告。
更新:
一个额外的想法:
如果您有一个应用程序(例如防病毒或备份软件)监视您的应用程序的 bin 目录并修改或更改该目录或 web.config 文件中的文件的属性(例如备份标志或时间戳),这将导致应用程序回收也是如此。