我们有一个MVC.NET应用程序,它在重新启动时遇到致命错误。在我们的Session_Start事件处理程序中,我们将会话ID添加到字典中。在Session_End处理程序中,我们将其删除。考虑请求的顺序如下:ASP.NET MVC应用程序为单个会话多次触发Session_Start
GET home.mvc
<应用程序重新启动>
GET的main.css
GET banner.jpg
GET somedata.mvc
...
由于应用程序的架构方式,如果在浏览器窗口中打开应用程序时执行重建,则这种顺序发生的频率相当高。除非我在生产环境中看到它,否则这不会非常令人担忧。例如,编辑web.config时会发生(尽管很少)。
重新启动后的请求全部归因于主页中的链接或来自JavaScript的AJAX调用。
我观察到.NET并行处理前5个请求。每个这样的请求都会导致它触发Session_Start事件。短时间后,它会触发Session_End事件3次。要清楚,每个Session_Start对应于完全相同的会话。它们都具有相同的会话ID,IsNewSession属性对于所有会话状态对象都是true。另外,Session_End事件而不是对应的会话正在被终止。会话持续存在,以及存储在会话状态中的任何数据。
我需要阻止它多次触发Session_Start,或者想出如何判断Session_End何时并不意味着会话已经结束。
你需要处理什么?你是说你的字典和asp.net的内部字典有差异吗?你在什么时候发现这种差异? – 2010-07-30 17:41:56
字典是存储在应用程序变量还是会话变量中? – 2010-07-30 19:38:02
字典是一个应用程序变量。 – 2010-07-30 20:24:46