Application_EndRequest不会在404上触发

我正在使用ASP MVC 2和Nhibernate。 我已经创建了一个HTTP模块,如夏天的NHibernate 13所示,看起来像这样:

public void Init(HttpApplication context) { context.PreRequestHandlerExecute += new EventHandler(Application_BeginRequest); context.PostRequestHandlerExecute += new EventHandler(Application_EndRequest); } private void Application_BeginRequest(object sender, EventArgs e) { ISession session = StaticSessionManager.OpenSession(); session.BeginTransaction(); CurrentSessionContext.Bind(session); } private void Application_EndRequest(object sender, EventArgs e) { ISession session = CurrentSessionContext.Unbind(StaticSessionManager.SessionFactory); if (session != null) try { session.Transaction.Commit(); } catch (Exception) { session.Transaction.Rollback(); } finally { session.Flush(); session.Close(); } } 

web.config中

  

我的问题是Application_EndRequest永远不会被调用404错误,所以如果我的视图没有呈现我完全阻止数据库访问,直到我的刷新发生。 我对NHibernate相当新,所以我不确定我是否遗漏了一些东西。

您可以在application_error中处置和回滚会话。 将session.close更改为session.dispose并检查它是否尚未处理。