Application_EndRequest не срабатывает на 404 - PullRequest
3 голосов
/ 16 марта 2010

Я использую ASP MVC 2 и Nhibernate. Я создал модуль HTTP, как показано в Summer of 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

<add name="UnitOfWork" type="HttpModules.UnitOfWork"/>

Моя проблема в том, что Application_EndRequest никогда не вызывается при ошибке 404, поэтому, если мое представление не отрисовывается, я полностью блокирую доступ к базе данных, пока не произойдет мой сброс. Я довольно новичок в NHibernate, поэтому я не уверен, что что-то упустил.

1 Ответ

3 голосов
/ 16 марта 2010

Вы можете удалить и откатить сеанс в application_error. измените файл session.close на файл session.dispose и проверьте, не уничтожен ли он.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...