Asp.net mvc Net MVC Nhibernate会话

Asp.net mvc Net MVC Nhibernate会话,asp.net-mvc,nhibernate,Asp.net Mvc,Nhibernate,在转向MVC和现在的IIS7时,我们开始遇到问题,因为每次请求(静态文件等)都会调用打开和关闭ISession的HTTP模块。我想避免完全重写NH会话管理,所以我在模块中实现了这段代码,以过滤掉除向mvchandler发送的请求以外的所有内容: void context_PreRequestHandlerExecute(object sender, System.EventArgs e) { HttpContext context = ((HttpApplication)sender).

在转向MVC和现在的IIS7时,我们开始遇到问题,因为每次请求(静态文件等)都会调用打开和关闭ISession的HTTP模块。我想避免完全重写NH会话管理,所以我在模块中实现了这段代码,以过滤掉除向mvchandler发送的请求以外的所有内容:

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
        }
}

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

虽然这并没有特别解决您的问题,但应该注意的是,打开会话的成本是很高的。因此,您可能首先考虑不执行此检查。

true,但是什么使我处于优势的地方是,当EntIdRevices事件会触发一些非MVC请求时,在当前会话中,我会随机地获得一个空REF异常。我想看一下:-您可能完全可以通过配置模块来处理这个问题。