【问题标题】:global.asax Application_Error not firingglobal.asax Application_Error 未触发
【发布时间】:2011-04-12 10:51:37
【问题描述】:

我的 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 吗?

【问题讨论】:

    标签: asp.net global-asax


    【解决方案1】:

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

    【讨论】:

    • 这对我有用!在过去的 6 个小时里,我一直在绕圈子,只是要注意这是由于预编译造成的!
    • 我的问题正好相反。以前,我的应用程序是非预编译的,但现在它是预编译的。我确认 PrecompiledApp.config 位于我网站的根目录中,但我的 Application_Start() 仍然没有触发。
    【解决方案2】:

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

    Response.TrySkipIisCustomErrors = true;
    

    【讨论】:

    【解决方案3】:

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

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

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

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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

      • 经典模式并不适合所有人。
      • 应该整合大多数人的选项。不经典。 -1
      猜你喜欢
      • 1970-01-01
      • 2011-11-01
      • 1970-01-01
      • 2016-11-12
      • 2011-06-30
      • 2011-01-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多