Enterprise Library – Exception Handling Application Block 學習手冊(最新版)Part 1

來源:互聯網
上載者:User
本文示範Enterprise Library – Exception Handling Application Block 異常管理模組的使用,如何將異常日誌記錄添加到應用程式中,以及如何使用Replace Handler隱藏敏感資訊。本文由http://blog.entlib.com 開源ASP.NET部落格平台小組根據EntLib HOL手冊編譯提供,歡迎交流。  練習一:記錄異常日誌1. 首先開啟\Enterprise Library 4.1 HOL\CS\Exception Handling\exercises\ex01\begin 目錄下的Puzzler.sln 專案檔。該應用程式執行2個功能:檢查單詞的拼字;根據字元列表,使用字典產生單字清單。 運行應用程式,介面如下所示。在單詞文本輸入框,輸入 ab123,然後點擊 Add Word 按鈕,將拋出一個未捕獲異常。 下面實現如何使用Exception Handling Application Block,進行異常管理。 2. 選擇PuzzlerUI 項目,添加如下dll 的引用。Microsoft.Practices.EnterpriseLibrary.ExceptionHandling.dll 3. 開啟Puzzler.cs 代碼檔案,添加對ExcepitonHandling 命名空間的引用。using Microsoft.Practices.EnterpriseLibrary.ExceptionHandling;  找到btnAddWord_Click 方法,添加try/catch 代碼塊,如下所示:        private void btnAddWord_Click(object sender, System.EventArgs e)        {            try            {                // TODO: Handle exceptions                PuzzlerService.Dictionary.AddWord(txtWordToCheck.Text);                errorProvider1.SetError(txtWordToCheck, "");            }            catch (Exception ex)            {                bool rethrow = ExceptionPolicy.HandleException(ex, "UI Policy");                if (rethrow)                    throw;                 MessageBox.Show(string.Format(                    "Failed to add word {0}, please contact support.",                    txtWordToCheck.Text));            }        } 4. 為 PuzzlerUI 項目添加app.config設定檔,並使用EntLib附帶的設定檔編輯器開啟設定檔。然後,添加 Exception Handling Application Block 的配置,如所示。
  接下來,添加新的Exception Policy,如所示。
 
 設定Exception Policy的Name屬性為 UI Policy,該Policy的名稱需要和前面的代碼中保持一致。bool rethrow = ExceptionPolicy.HandleException(ex, "UI Policy"); 選擇UI Policy 節點,添加新的Exception Type,如所示。  
 在彈出的Type Selector對話方塊中,選擇System.Exception類型,如所示。
  這個filter設定哪一類的Exception由異常處理代碼來負責處理,將處理所有繼承自System.Exception 類型的異常。另外,設定System.Exception類型的PostHandlingAction屬性為None,該屬性值None表示所有的異常將在異常處理代碼內部處理,調用方(caller)不需要在catch代碼塊中重新拋出異常。下面進一步選擇Exception Handling Application Block | UI Policy | Exception 節點,並選擇 New | Logging Handler 功能表項目,如所示。這一步操作將自動添加Logging Application Block到設定檔中,你可以觀察一下app.config 設定檔的變化。 
 選擇 Exception Handling Application Block | UI Policy | Exception | Logging Handler 節點,設定如下屬性:FormatterType = TextExceptionFormatterLogCategory = General
 
 上述配置操作完成後,記得要儲存設定檔。 5. 設定PuzzlerUI 項目添加對如下dll引用。Microsoft.Practices.EnterpriseLibrary.ExceptionHandling.Logging.dll 因為Enterprise Library 的一個目標是保持Application Blocks之間相互低耦合,因此Exception Handling Application Block也可以不必使用Logging Application Block(例如,建立自己的異常管理Handler)。如果你使用兩個application blocks,你需要引用上述的dll, Exception Handler來通過logging application block 來記錄異常日誌(預設安裝情況下,該dll在如下目錄C:\Program Files\Microsoft Enterprise Library 4.1 - October 2008\Bin)。 6. 再次運行應用程式重複前面的步驟,在單詞文本輸入框,輸入abc123,然後點擊 Add Word 按鈕,將彈出一個對話方塊 – Failed to add word abc123, please contact support。 
 檢查windows的事件記錄(Event Log),查看Application 日誌,發現日誌資訊已經記錄了。
  為了在應用程式中給所有的代碼添加try/catch,你可以考慮添加一個全域的Exception Handler。有2個events可以用來監聽未捕獲異常(unhandled exception):(1)當執行Application.Run 方法的線程發生未捕獲異常時,觸發Application.ThreadException事件。(2)如果handler拋出異常,或者不在UI線程中發生異常,將觸發AppDomain.UnhandledException事件。 7. 更新代碼(1)刪除之前btnAddWord_Click方法中添加的代碼,如下所示:        private void btnAddWord_Click(object sender, System.EventArgs e)        {            PuzzlerService.Dictionary.AddWord(txtWordToCheck.Text);            errorProvider1.SetError(txtWordToCheck, "");        } (2)開啟Startup.cs代碼檔案,添加命名空間的引用。using Microsoft.Practices.EnterpriseLibrary.ExceptionHandling;  同時,在Startup類中添加如下方法來處理異常。        public static void HandleException(Exception ex, string policy)        {            Boolean rethrow = false;            try            {                rethrow = ExceptionPolicy.HandleException(ex, policy);            }            catch (Exception innerEx)            {                string errorMsg = "An unexpected exception occured while " +                    "calling HandleException with policy '" + policy + "'. ";                errorMsg += Environment.NewLine + innerEx.ToString();                 MessageBox.Show(errorMsg, "Application Error",                    MessageBoxButtons.OK, MessageBoxIcon.Stop);                 throw ex;            }             if (rethrow)            {                // WARNING: This will truncate the stack of the exception                throw ex;            }            else            {                MessageBox.Show("An unhandled exception occurred and has " +                    "been logged. Please contact support.");            }        } 上述方法使用Exception Handling Application Block,如果Exception Handling Application Block自身發生問題(如遺漏配置項),也將顯示有效資訊。 繼續添加如下的方法作為應用程式的ThreadException事件的event handler:        static void Application_ThreadException(object sender, ThreadExceptionEventArgs e)        {            HandleException(e.Exception, "UI Policy");        } 上述方法使用前面定義過的UI Policy。在隨後的練習中,將定製這一Policy,允許忽略某些異常,並關閉應用程式。 下面繼續添加AppDomain的UnhandledException 事件的Event Handler:        static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)        {            if (e.ExceptionObject is System.Exception)            {                HandleException((System.Exception)e.ExceptionObject, "Unhandled Policy");            }        }上述代碼使用了一個新的policy(Unhandled Policy),下一節將建立。Unhandled Policy 總是僅記錄異常,並不重拋異常。 最後,在Main方法中,通過如下代碼串連event handler和事件:         static void Main()          {             Application.ThreadException += new ThreadExceptionEventHandler(Application_ThreadException);             AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);               Puzzler f = new Puzzler();              Application.Run(f);         } 再次運行應用程式,重複前面的測試步驟,檢查彈出的訊息對話方塊和事件記錄中的異常記錄,確認完成了上述所有步驟,且應用程式工作和預期一致。 http://blog.entlib.com 開源ASP.NET部落格平台小組,歡迎你繼續方法下一節內容:Exception Handling application block – 異常管理原則。  參考文檔:Exception Handling Application Block Hands-On Labs for Enterprise Library

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.