2

所以,今天早上,我们托管 MVC3 网站的服务器断电。由于它重新上线,我们随机丢失了我们的会话值。这只发生在此服务器上,而不是本地或临时服务器上。这与超时无关,因为会话在短短 5 分钟后清除。会话设置为 12 小时后到期。当值丢失时,会话的 SessionID 不会更改。

我正在使用 Log4Net 并添加了很多日志记录来尝试查明这个问题。我已将 Session_Start 和 Session_End 事件添加到 Global.asax 中,并在整个控制器中检查会话值。

我有一个显示项目列表的索引视图。列表中的每个项目都有一个链接,可将您带到详细信息视图。我检查每个 Action 调用的会话值。从详细信息视图回调到索引视图时,会话值似乎总是丢失。我注意到的是,每次我的会话值丢失时,都会触发一个 Session_Start 事件。

没有 Session_End 事件,只有一个 Start。什么会导致这个开始发生?

如果我可以提供更多信息,请发表评论,我会添加我可以添加的内容。

4

2 回答 2

3

如果您使用InProcSessionState,那么您的应用程序池可能会在您的某些会话中回收。要补救使用SQLServer SessionStateMode、StateServer SessionStateMode 或减轻应用程序池回收。

http://msdn.microsoft.com/en-us/library/ms178586.aspx


SQLServer 模式将会话状态存储在 SQL Server 数据库中。这可确保在重新启动 Web 应用程序时保留会话状态,并使会话状态可用于 Web 场中的多个 Web 服务器。

于 2012-05-23T22:57:31.707 回答
0

这最终成为一个硬件问题。此 Web 服务器是一个虚拟机。似乎停电影响了我们所有的虚拟服务器,导致了很多 i/o 问题以及内存问题。我确实缩小了应用程序中丢失状态的区域,但它根本不一致。

由于他们重新启动了虚拟服务器主机,我们不再遇到问题。

于 2012-05-25T19:19:23.953 回答