ASP.NET的Session_End事件未触发

6
我正在尝试在ASP.NET会话结束时执行数据库事务(在Windows 2008服务器上的简单WebForms应用程序中)。我意识到许多回答者会建议不要依赖Session_End事件(正如我在谷歌搜索此主题时阅读的一百个论坛帖子中所了解的)。请容忍我。
我已经完成以下工作:
1. 在web.config中启用了会话状态: 2. 确认当我调用Session.Abandon()或会话超时时,Session_End事件不会触发。
3. 确认会话在1分钟后超时(如上所述)。
4. 确认我没有尝试访问任何Request或Response或Server对象(我了解这将静默出错)。
编辑:我还确认我正在存储会话数据-我使用多个会话变量存储不同的数据点,并在用户登录到应用程序时实例化它们。
编辑:我还确认我没有创建会话,然后在同一请求中放弃它。如上所述,即使会话超时(即未发出请求),问题仍然存在。
请帮忙!
4个回答

2

对于那些寻找解决方案但没有找到答案的人,我看到过这样一种情况,一个项目的Global.asax被定义为引用了一个代码后备文件,但是事件被定义在asax中而不是.cs文件中。

在这种情况下,它会触发Session_Start,但从未触发Session_End,就好像它正在查找引用的.cs文件。

通过删除对代码后备文件的引用,Session_End开始按预期触发。


2
如果您没有将任何内容保存到会话中,则不会触发session_end事件。如果您在第一个请求中保存数据到会话中,并在同一请求中调用abandon,则也不会触发session_end事件。
希望这能帮到您!
T

谢谢,Tamas。是的,我在这个应用程序中使用了相当多的会话变量,所以我肯定是在会话中保存数据。 - Octavient

0
原来事件确实已经触发了,但是执行的代码悄悄地出现了错误,因为我没有正确访问应用程序对象和一些我的App_Code类(我仍然不知道如何做到这一点,但值得单独在Stack Overflow上提出一个问题)。

我将一些简单的日志消息暂时地导入到一个文本文件中。 - Octavient

0
尝试在查询数据库的同一方法内初始化会话。在查询数据库之前进行初始化。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接