Asp.net mvc 在IIS7集成模式下获取NullReferenceException
我有一个运行.NET4.0的应用程序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
- MVC3.0
- Microsoft ServiceLocator 1.0
- 结构图2.6.2
- StructureMap适配器1.1.0.2
- NHibernate 3.1.0.4000
- Log4Net 1.2.10
[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,但声明只初始化一次
应用程序_Start
始终是一种与请求无关的启动方法,不应用于访问当前请求。但是在经典模式下(以及它在IIS<7中的运行方式),应用程序是用第一个请求初始化的-这就是为什么HttpContext.Current
可用的原因。在IIS7中,将请求初始化与应用程序启动分离的举动导致了HttpContext.Current再次变得不可用。。。这就是它最初的工作原理。马修,创业初始化的预期方式是什么。IHTTP应用程序。初始化?是否断言init只被调用一次?