6

我正在尝试在 ASP.NET 会话结束时执行数据库事务(在 Windows 2008 Server 上的简单 WebForms 应用程序中)。我意识到许多受访者会建议不要依赖 Session_End 事件(正如我在谷歌搜索产生的关于这个主题的一百篇论坛帖子中读到的那样)。请幽默我。

我做过这些事情:

  1. 在 web.config 中启用会话状态:<sessionState mode="InProc" cookieless="false" timeout="1" />

  2. 确认当我调用 Session.Abandon() 或会话超时时 Session_End 事件不会触发。

  3. 确认会话在 1 分钟后超时(如上配置)。

  4. 确认我没有尝试访问任何 Request 或 Response 或 Server 对象(我理解这会默默地出错)。

编辑:我还确认我在会话中存储数据——我使用许多会话变量来存储不同的数据点,这些在用户登录到应用程序时被实例化。

编辑:我还确认我没有创建会话,然后在同一个请求中放弃它。如上所述,即使会话超时(即没有发出请求),问题仍然存在。

请帮忙!

4

4 回答 4

2

对于其他寻求解决方案但没有找到解决此问题的答案的人,我看到了一个案例,其中项目的 Global.asax 是使用引用的代码隐藏文件定义的,但事件是在 asax 而不是 .cs 文件中定义的。

在这种情况下,它会触发 Session_Start,但不会触发 Session_End,就好像它正在查看引用的 .cs 文件一样。

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

于 2014-02-04T17:12:23.387 回答
2

如果您不将任何内容保存到会话中,则 session_end 将不会触发。如果您在第一个请求中将数据保存在会话中,并在同一请求中调用放弃,则 session_end 也不会触发。

希望这可以帮助!

于 2013-04-03T01:41:17.773 回答
0

尝试从查询数据库的同一方法中初始化会话。在查询数据库之前执行此操作。

于 2013-04-03T13:52:17.460 回答
0

结果是事件被触发了,但是正在执行的代码默默地出错了,因为我没有正确访问 Application 对象和我的一些 App_Code 类(我仍然不知道该怎么做,但值得一个单独的堆栈溢出问题)。

于 2013-04-03T13:43:43.917 回答