[英]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.