MVC3 站点丢失存储在会话中的值
本文关键字:会话 存储 站点 MVC3 | 更新日期: 2023-09-27 18:35:05
所以,今天早上我们失去了托管MVC3网站的服务器的电源。 由于它已重新上线,我们将随机丢失会话值。 这仅发生在此服务器上,而不发生在本地或暂存服务器上。 这与超时无关,因为会话会在短短 5 分钟后清除。 会话设置为在 12 小时后过期。 当值丢失时,会话的会话 ID 不会更改。
我正在使用 Log4Net,并添加了很多日志记录来尝试查明此问题。 我已经将Session_Start和Session_End事件添加到 Global.asax 中,并通过我的控制器检查会话值。
我有一个显示项目列表的"索引"视图。 列表中的每一项都有一个链接,可将您带到"详细信息"视图。 我检查每个操作调用的会话值。 从"详细信息"视图回调到"索引"视图时,会话值似乎总是丢失。 我注意到的是,每次我的会话值丢失时,都会触发一个Session_Start事件。
没有Session_End事件,只有开始。 什么会导致这种开始发生?
如果我可以提供更多信息,请发表评论,我会尽我所能添加。
如果您使用的是InProc
会话状态,则您的应用程序池可能会在某些会话中回收。若要解决此问题,请使用 SQLServer SessionStateMode、StateServer SessionStateMode 或缓解应用程序池回收。
http://msdn.microsoft.com/en-us/library/ms178586.aspx
SQLServer 模式将会话状态存储在 SQL Server 数据库中。这 确保在 Web 应用程序 重新启动,并使会话状态可用于多个 Web Web 场中的服务器。
这最终是一个硬件问题。 此 Web 服务器是虚拟机。似乎我们的断电影响了我们所有的虚拟服务器,导致许多I/O问题以及内存问题。 我确实缩小了应用程序中状态丢失的区域,但它根本不一致。
自从他们重新启动虚拟服务器主机以来,我们不再遇到问题。