global.asax Application_Error未触发

时间:2010-09-15 00:47:51

标签: asp.net global-asax

我的global.asax似乎没有被解雇。我有:

void Application_Error(object sender, EventArgs e) 
{ 
    // Code that runs when an unhandled error occurs
    Server.Transfer("~/ExceptionFormView.aspx");
}

在我的web.config中,我没有像CustomErrors那样的东西。因为我希望所有内容都由Global.asax处理并转移到ExceptionFormView.aspx。

它在本地工作正常,但在部署到服务器时则不行。有什么想法吗?

我是否需要PrecompiledApp.config?

4 个答案:

答案 0 :(得分:19)

如果您的Web.config中没有customErrors部分,则与包含mode="RemoteOnly"的部分相同。此customError模式将使本地请求(从运行IIS的服务器发出)不使用自定义错误,它将按预期执行Application_Error()方法。远程请求将使用customErrors而不执行上述方法。

这解释了为什么您在本地看到的行为与服务器上的行为不同。通过将customErrors模式明确更改为On或Off,可以在任何环境中重现此行为。 On将不会执行Application_Error()部分。

<customErrors mode="On|Off|RemoteOnly" />

这当然不能解决您的问题,您希望无论如何都要执行该方法。我在another question上有一笔赏金,我们试图找出当customErrors模式为On时Application_Error()方法未触发的原因。几天后再回来查看我们是否找到了解决方案。

答案 1 :(得分:4)

如果您使用的是IIS 7,请尝试设置:

Response.TrySkipIisCustomErrors = true;

答案 2 :(得分:3)

如果您以前将应用程序部署为预编译但现在不是,那么是的,您需要删除bin目录中的PrecompiledApp.config和Deployment.dll。 .NET将使用Deployment.dll中的全局代码而不是您的更改。

答案 3 :(得分:0)

在IIS7中,集成了应用程序池。它必须是经典的: http://praveenbattula.blogspot.com/2009/12/iis-7-managed-pipeline-mode-globalasax.html