2010-08-06 62 views
0

当转移到MVC和现在的IIS7时,我们开始遇到问题,即在每个请求(静态文件等)上调用了打开和关闭ISession的HTTP模块。我想避免这样做NH会话管理的全部重写,所以我在我的模块中实现此代码,以过滤掉一切,但请求要去mvchandler:ASP.Net MVC Nhibernate Session

void context_PreRequestHandlerExecute(object sender, System.EventArgs e) 
{ 
    HttpContext context = ((HttpApplication)sender).Context; 
    Type mvcht = typeof(System.Web.Mvc.MvcHandler); 
    if (context.Handler != null && context.Handler.GetType().IsAssignableFrom(mvcht)) 
     { 
      // Code Here 
     } 
} 

我的问题是,我从来没有使用此事件在请求管道中。那么,这样做有没有隐藏的陷阱?另外,我是否在为每个请求运行此检查时查看性能问题?我还没有注意到,但这是一个新的,但仍然很小的应用程序。

回答

0

虽然这并不具体解决您的问题,但应该注意的是,开放会话的成本为very minimal。所以你可能会考虑不在第一时间执行这项检查。

+0

确实如此,但是推动我的优势在于,当end_request事件针对某些非MVC请求触发时,我会在当前会话中随机获取null ref异常。 – CocoB 2010-08-06 13:47:52

+0

在这种情况下,我会看看:http://blogs.iis.net/thomad/archive/2006/11/04/precondition-what.aspx - 您可能能够纯粹通过配置模块。 – DanP 2010-08-06 14:03:00