管理 ASP.NET Mobile Web Web 網頁中的調整式錯誤報告
更新:2007 年 11 月
處理 ASP.NET 網頁期間,錯誤會被擲回為例外狀況 (Exception),而且會由 ASP.NET 錯誤處理機制來處理。
本章節提供 ASP.NET 中錯誤報告的概觀,以及這點與包含 Mobile Web 網頁之 ASP.NET 應用程式的關聯。
ASP.NET 錯誤報告的概觀
有幾個錯誤類型可能會發生在要求期間,包括:
HTTP 內建項目的錯誤,例如要求一個遺失的檔案
將網頁、使用者控制項或類似檔案編譯到組件時的剖析錯誤
於網頁存留期 (Lifetime) 間在 ASP.NET 中執行 Web 網頁的錯誤
讀取組態檔的錯誤
系統錯誤,例如記憶體不足的情況
ASP.NET 提供數個自訂錯誤報告的功能。
錯誤報告模式
您可以設定應用程式,使其顯示詳細的錯誤訊息 (適用於開發人員)、基本錯誤訊息 (適用於一般使用者),或是自訂的錯誤訊息。您可以調整設定,使應用程式只在用戶端為本機電腦時顯示詳細錯誤。
應用程式層級錯誤
當錯誤發生在要求期間時,ASP.NET 便會引發 Application_Error 事件。Global.asax 檔中的方法可以處理這個事件,並會覆寫錯誤處理行為。
頁面層級錯誤
發生在頁面存留期間的錯誤會引發 Page_Error 事件。此事件的處理常式能夠根據錯誤種類,而執行通知工作或嘗試更正動作,其中包括隱藏錯誤。
自訂錯誤
在 Web.config 檔中,您可以針對發生在 ASP.NET 應用程式內的例外狀況指定一組自訂頁面。當錯誤發生時,ASP.NET 便會檢查應用程式是否設定為顯示自訂錯誤,以及是否有適當的錯誤頁面。如果其中一個為真,ASP.NET 就會重新導入錯誤頁面,傳遞包含原始 URL 的參數。
Mobile Web 應用程式中的調整式錯誤報告概觀
在 Mobile Web 網頁中的錯誤報告運作方式,與在其他任何 ASP.NET 應用程式中的運作方式相同。您也可以使用相同的自訂技巧。然而,在行為上的一些差異,可使 Mobile Web 網頁中的錯誤報告更適合用於各種不同裝置。
裝置特定的格式
錯誤訊息會自動格式化為目標裝置的標記。對於 WML 裝置,這會是 Card Deck。對於 HTML 裝置,這會是 HTML 頁面。
注意事項: |
---|
如果您有撰寫自訂錯誤頁面,我們建議您將這些頁面撰寫成 ASP.NET Mobile Web 網頁,如此一來,您的自訂錯誤頁面便可根據每種類型的裝置正確地格式化。 |
限定的預設錯誤訊息內容
對於所有的行動裝置,內建的錯誤訊息本質上是簡明扼要的,即使是在應用程式設定來顯示詳細錯誤的時候也是如此。錯誤訊息一般包含引發的例外狀況類別和造成例外狀況的方法。然而,當用戶端是桌上型電腦的瀏覽器時,這時會呈現標準的錯誤訊息。
HTTP 回應碼
當 ASP.NET 報告例外狀況時,便會設定 HTTP 回應碼以反映錯誤的性質。瀏覽器可以在回應碼上動作,或顯示包含在回應內容中的錯誤詳細資料。但是,某些行動裝置,尤其是 WML 式的電話,只有在有錯誤的情況下才會顯示回應碼。當這類裝置發生錯誤時,此要求會傳回 HTTP 回應碼 200 以表示成功,但是頁面的內文會包含錯誤訊息。在 HTML 裝置上,此要求會傳回實際的錯誤碼,以便讓伺服器採取適當回應。
調整錯誤報告程序
對於 Mobile Web 網頁,ASP.NET 會使用下列處理程序找出並報告錯誤:
如果發生應用程式層級錯誤,ErrorHandlerModule 型別的 HTTP 模組會處理該錯誤。(這個模組已自動安裝)。
當例外狀況在網頁生命週期發生在頁面層級時,ASP.NET 會呼叫網頁的 OnError 方法。因為這個頁面是一個行動網頁,所以會呼叫 MobilePage 中的覆寫實作 (Implementation),該實作則會呼叫所指派之頁面配接器的 HandleError 方法。這個配接器方法可以報告錯誤的詳細資料,並會傳回表示錯誤已經處理的值。如果它沒有這樣做,例外狀況就會繼續進行處理。ASP.NET 會自動使用自訂錯誤網頁。
ASP.NET 會從步驟 1 呼叫這個錯誤處理常式。如果目標裝置是可以呈現 ASP.NET 產生之完整錯誤訊息的 HTML 瀏覽器,這個方法便會結束。
否則,ASP.NET 便會收集此例外狀況的相關資訊,建立 ErrorFormatterPage 型別之內部定義行動網頁的執行個體 (Instance),將該資料繫結到收集的資料,然後呈現結果。這個網頁會負責產生裝置特定的錯誤訊息。由於例外狀況已經完成處理,因此這個事件方法不會傳回 HTTP 錯誤狀態碼。