在IIS7集成模式下获取NullReferenceException

时间:2011-08-30 19:59:30

标签: asp.net-mvc nhibernate iis-7 structuremap

我有一个使用

运行.NET 4.0的应用程序
  • MVC 3.0
  • Microsoft ServiceLocator 1.0
  • StructureMap 2.6.2
  • StructureMap Adapter 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

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

我知道在哪里可以查看或挂钩修复错误?

2 个答案:

答案 0 :(得分:3)

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

解决方法是:

  • use a module用于初始化nhibernate
  • 在Application_BeginRequest中初始化nhibernate但声明它只被初始化一次

答案 1 :(得分:1)

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