我的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?
答案 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