2011-08-30 31 views
2

我有一个应用程序乳宁.NET 4.0获得的NullReferenceException在IIS7集成模式

  • MVC 3.0
  • 微软的ServiceLocator 1.0
  • StructureMap 2.6.2
  • StructureMap适配器1.1.0.2
  • NHibernate 3.1.0.4000
  • Log4Net 1.2.10

该应用程序在开发服务器,IIS6和IIS7经典模式下运行良好。 在IIS7集成模式下运行相同的应用程序在Global.asax Application_Start之后提供了一个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 

附带的调试器不会在异常中断。但是该页面显示了死亡的黄页。

任何想法,我可以看看或挂钩来解决错误?

+0

你加载的HttpModules或HttpHandlers的? IIS6,IIS7 Classic和Cassini使用相同的设置,而IIS7 Integrated在安装HttpHandler的方式上有所不同。 http://stackoverflow.com/questions/821934/error-when-deploying-asp-net-mvc-nhibernate-app-to-iis7 – Andreas

+0

Andreas,我只有一个global.asax,没有其他模块或处理程序。 NHibernate在Application_Start中初始化。我会尝试在链接中给出的修复。 – Christian13467

回答

3

根据Error when deploying ASP.NET MVC NHibernate app to IIS7和其他posts很多它不是在的Application_Start如果应用程序在集成模式下运行的支持,以初始化NHibernate的了。我没有发现这种行为的真正原因。可能是Darins的回答是原因,但我发现在NHibernate初始化代码中没有访问HttpContext.Current。

的解决方法是:

  • use a module为NHibernate的
  • 初始化NHibernate的初始化的Application_BeginRequest,但断言,它被初始化一次
1

在集成模式下运行时,诸如HttpContext,Request,Response,Session等对象在Application_Start中不可用。因此,请确保您的代码都不会尝试在此方法中访问它们。

+3

为了澄清Darin在说什么,'Application_Start'始终是一个请求不可知的启动方法,不应该用于访问当前的请求。 **但是,在经典模式下(以及它如何在IIS <7中运行),应用程序会在第一次请求时被初始化 - 这就是为什么'HttpContext.Current'可用。在IIS7中,将请求初始化从应用程序启动中分离出来的做法导致'HttpContext.Current'再次变得不可用......这就是它最初的工作原理。 –

+0

马修,启动initializsation的方式是什么。 IHttpApplication.Init?它是否断言init只被调用一次? – Christian13467

相关问题