[英]Application_Error event in Global.asax not firing in IIS7, but works fine in IIS6
去年,我们将Web应用程序移到了新服务器上。 以下是迁移之前的系统/应用程序配置规格:
以下是移至新服务器后的规格:
问题在于,由于移动导致环境发生了巨大变化之后,Global.asax中的Application_Error事件不再像以前那样触发。 我在此遇到了许多问题(请参阅此问题的结尾),但是所有解决方案似乎都无效。 它们也很老,所以我认为SE应该提供有关此主题的一些更新答案。
我想做的事:
如果抛出特定异常,我想导航到特定错误页面。 否则,请转到我的web.config中定义的error.aspx
。 自从移动以来,我没有对web.config或代码进行任何更改。 这是Application_Error事件:
Sub Application_Error(ByVal sender As Object, ByVal e As EventArgs)
If TypeOf (Server.GetLastError) Is System.Web.HttpRequestValidationException Then
NavigateToErrorPage("Display special error message here")
End If
End Sub
web.config中的customErrors
:
<customErrors mode="RemoteOnly" defaultRedirect="error.aspx" />
那么,我该怎么做才能使应用程序在IIS 7.5中的行为与在IIS 6中的行为相同?
编辑 :我会注意到在本地下本地运行我的应用程序时会触发Application_Error事件。
我发现的其他问题在这里无法帮助我:
没有触发Application_Error事件global.asax
global.asax Application_Error无法启动
当customerrors =“ On”时,Application_Error不触发
事实证明,这些答案毕竟是正确的:
如果打开自定义错误,是否会触发global.asax Application_Error事件?
我最终将代码更改为此:
Sub Application_Error(ByVal sender As Object, ByVal e As EventArgs)
Dim ex As Exception = Server.GetLastError
If TypeOf ex Is System.Web.HttpRequestValidationException Then
Server.ClearError()
'NavigateToErrorPage() calls Server.Transfer()
NavigateToErrorPage("Display special error message here")
End If
End Sub
在旧的配置和新的配置之间肯定会在框架方面进行某些更改,因为在此之前它可以很好地工作,因此很困惑。 很有可能是IIS,也可能是MVC被引入到Webforms项目中。 我现在只能进行理论化,但是似乎在Application_Error
事件中调用Server.Transfer()
也具有调用Server.ClearError()
的辅助作用。 但是,在新环境中,情况不再如此。 我Server.Transfer()
确实确实尝试导航到自定义页面,但是,由于该错误并未在事件结束时被清除,因此ASP.NET的默认错误处理进来了,这使用户无法进入error.aspx
。
因此,看来这毕竟是一个愚蠢的问题,尽管重要的是要让其他任何经历过剧烈环境变化的人都留在身边,并且想知道为什么他们从未更改过的代码突然停止工作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.