Asp.net mvc 在IIS7集成模式下获取NullReferenceException

Asp.net mvc 在IIS7集成模式下获取NullReferenceException,asp.net-mvc,nhibernate,iis-7,structuremap,Asp.net Mvc,Nhibernate,Iis 7,Structuremap,我有一个运行.NET4.0的应用程序 MVC3.0 Microsoft ServiceLocator 1.0 结构图2.6.2 StructureMap适配器1.1.0.2 NHibernate 3.1.0.4000 Log4Net 1.2.10 该应用程序在development server、IIS6和IIS7经典模式下运行良好。 在IIS7集成模式下运行同一应用程序会在Global.asax应用程序启动后引发NullReferenceException 堆栈跟踪是: [NullRefe

我有一个运行.NET4.0的应用程序

  • MVC3.0
  • Microsoft ServiceLocator 1.0
  • 结构图2.6.2
  • StructureMap适配器1.1.0.2
  • NHibernate 3.1.0.4000
  • Log4Net 1.2.10
该应用程序在development server、IIS6和IIS7经典模式下运行良好。 在IIS7集成模式下运行同一应用程序会在Global.asax应用程序启动后引发NullReferenceException

堆栈跟踪是:

[NullReferenceException: Object reference not set to an instance of an object.]
System.Web.PipelineStepManager.ResumeSteps(Exception error) +1116
System.Web.HttpApplication.BeginProcessRequestNotification(HttpContext context, AsyncCallback cb) +89
System.Web.HttpRuntime.ProcessRequestNotificationPrivate(IIS7WorkerRequest wr, HttpContext context) +189
附加的调试器不会在异常时中断。但是这一页显示了死亡的黄页


您知道我可以在哪里查找或钩住以修复错误吗?

在集成模式下运行时,对象(如HttpContext、请求、响应、会话等)会出现错误。。。在
应用程序启动
中不可用。因此,请确保您的任何代码都不会尝试使用此方法访问它们。

根据以及许多其他信息,如果应用程序以集成模式运行,则不支持在应用程序启动中初始化NHibernate。我找不到那种行为的真正原因。可能是因为Darins的答案,但我在NHibernate初始化代码中找不到对HttpContext.Current的访问

解决办法是:

  • 用于初始化nhibernate
  • 在应用程序_BeginRequest中初始化nhibernate,但声明只初始化一次

您正在加载HttpModule还是HttpHandler?IIS6、IIS7 Classic和Cassini使用相同的设置,而IIS7 Integrated在设置HttpHandler的方式上有所不同。Andreas,我只有一个global.asax,没有其他模块或处理程序。NHibernate在应用程序启动时初始化。我将尝试您链接中给出的修复。为了澄清Darin的意思,
应用程序_Start
始终是一种与请求无关的启动方法,不应用于访问当前请求。但是在经典模式下(以及它在IIS<7中的运行方式),应用程序是用第一个请求初始化的-这就是为什么
HttpContext.Current
可用的原因。在IIS7中,将请求初始化与应用程序启动分离的举动导致了HttpContext.Current再次变得不可用。。。这就是它最初的工作原理。马修,创业初始化的预期方式是什么。IHTTP应用程序。初始化?是否断言init只被调用一次?