2012-03-14 79 views
4

我的項目有一個名爲oops.aspx的錯誤頁面。我們在global.asax以下代碼:Global.asax沒有捕獲錯誤?

protected void Application_Error(object sender, EventArgs e) 
{ 
    Server.Transfer("~/oops.aspx", true); 
} 

oops.aspx能夠提取錯誤,產生一個很好的電子郵件服務器,並顯示一條錯誤信息給用戶。

使用Server.Transfer會保留URL,表單信息和其他有用的疑難解答信息。在oops.aspx中的某一時刻,在撰寫電子郵件時,我抓取Request.RawUrl並將其包含在電子郵件中。這是導致錯誤的頁面的URL(帶查詢字符串參數)。

我們也有這個在web.config中:

<customErrors mode="On" defaultRedirect="oops.aspx"></customErrors> 

當系統重定向,因爲基於這樣的錯誤的,它重定向到/oops.aspx?aspxerrorpath=/Clients/EditClient.aspx(有時/,有時%2F路徑分隔符)。查詢字符串和異常信息丟失,所以oops.aspx生成的電子郵件和消息很少,並且沒有太多說明發生了什麼。

最近我收到了很多第二種錯誤。錯誤發生在小束中,其中幾個在幾分鐘內,然後在幾個小時內沒有發生。他們發生在整個網站(包括WebResource.axd等),這使我認爲這不是我們網站的特定錯誤,而是發生在較低層次上的事情,如會話服務器問題或類似事件。

因此,與所有的,我實際的問題:

我有在這樣一種方式,他們不會被抓到的Global.asax中發生的現場錯誤。什麼會導致此類錯誤,以及如何解決這些錯誤?

回答

6

由於您在web.config中啓用了自定義錯誤,因此在執行Application_Error並將您重定向到oops.aspx之前,將會捕獲該異常。如果您不希望發生這種情況,請不要在web.config中啓用自定義錯誤。這樣,假設您已將IIS配置爲以集成管道模式運行應用程序池,則所有錯誤都將通過Application_Error

+0

Darin與'Application_Error'和應用程序池處於集成管道模式有什麼關係? – VoodooChild 2012-03-14 17:50:17

+3

@VoodooChild,如果你在IIS 6.0中以經典模式運行,當有人試圖訪問例如'/ myapp/foo.jpg'時,Application_Error將永遠不會被擊中。 ASP.NET甚至不會收到此請求的通知。 IIS將直接爲圖像提供服務。在集成管道模式下,所有請求都通過一個託管處理程序。 – 2012-03-14 17:51:40