我正在尝试在ASP.NET会话结束时(在Windows 2008 Server上的简单WebForms应用程序中)执行数据库事务。我意识到许多受访者建议不要依赖Session_End事件(正如我在Google搜索产生的关于此主题的一百个论坛帖子中所读到的那样)。请幽默我。
我做过这些事情:
在web.config中启用会话状态:<sessionState mode="InProc" cookieless="false" timeout="1" />
确认当我调用Session.Abandon()或会话超时时,Session_End事件不会触发。
确认会话在1分钟后超时(如上所述)。
确认我没有尝试访问任何请求或响应或服务器对象(我理解会默默地出错)。
请帮忙!
答案 0 :(得分:1)
如果您未在会话中保存任何内容,则session_end将不会触发。 如果您在第一个请求中保存会话中的数据,并在同一请求中调用abandon,则session_end也不会被触发。
希望这有帮助!
Ť
答案 1 :(得分:1)
对于寻找解决方案但没有找到问题答案的其他人,我看到一个案例,其中项目的Global.asax定义了引用的代码隐藏文件,但是在asax中定义的事件而不是.cs文件。
在这种情况下,它会触发Session_Start,但不会触发Session_End,就好像它正在查找引用的.cs文件一样。
通过删除对文件后面的代码的引用,Session_End按预期开始触发。
答案 2 :(得分:0)
事件WAS触发,但正在执行的代码是静默错误的,因为我没有正确访问Application对象和我的一些App_Code类(我仍然不知道该怎么做,但是值得单独的Stack Overflow问题。)
答案 3 :(得分:0)
尝试从查询数据库的同一方法中初始化会话。在查询数据库之前先执行此操作。