1. 解決的問題:
(1) 它支援整個應用程式體繫結構層的異常處理,而不僅限於服務介面的界限。
(2) 它使得異常處理策略可以在管理層定義和維護,以便決策人員(可能是系統管理員和開發人員)可以定義如何處理異常。他們可以維護和修改控制異常處理的規則集,而無需更改塊的應用程式代碼。
(3) 它提供了常用的異常處理功能,例如記錄異常資訊的功能、通過將原始異常替換為其他異常來隱藏敏感資訊的功能,以及通過將原始異常打包到另一個異常中來添加異常的上下文資訊的功能。這些功能封裝在名為 exception handlers 的 .NET 類中。
(4) 它可以合并多個例外處理常式以產生某個異常所需的響應,例如先記錄異常資訊,再將原始異常替換為其他異常。
(5) 它使開發人員能夠建立自己的例外處理常式。
(6) 它以一致的方式調用例外處理常式。這意味著,處理常式可以在應用程式之中和之間的多種場合下使用。
2. 適用情境:
異常處理應用程式塊被設計為支援包含在應用程式組件的 catch 語句中的典型代碼。該應用程式塊允許開發人員將此邏輯封裝為可重用的例外處理常式,而不是在應用程式組件的相同 catch 塊中重複這段代碼(例如,記錄異常資訊)。例外處理常式是封裝異常處理邏輯和實現名為 IExceptionHandler 的異常處理應用程式塊介面的 .NET 類。異常處理應用程式塊包含四個例外處理常式:
(1) 封裝處理常式(Wrap Handler)。此例外處理常式可將一個異常封裝到另一個異常中。
(2) 替換處理常式(Replace Handler)。此例外處理常式可將一個異常替換為另一個異常。
(3) Tlog程式(Logging Handler)。此例外處理常式可格式化異常資訊,例如訊息和堆疊追蹤等。然後,Tlog程式將該資訊提供給企業程式庫日誌和規範應用程式塊,以便可以將它發布。
(4) Fault Contract Exception Handler. This exception handler is designed for use at Windows Communication Foundation(WCF) service boundaries, and generates a new Fault Contract from the exception.
異常處理應用程式塊可讓您將異常類型與指定的策略相關聯。您可以使用配置控制台來完成此項工作。策略可指定在應用程式塊處理特定異常類型時執行的例外處理常式。您可以將這些處理常式串聯起來,這樣,在處理關聯的異常類型時就可以執行一系列處理常式。
3. 使用:
使用EntLib組態工具,New “EHAB”-> New “Exception Policy”->New “Exception Type”。可以建立如下幾種常用異常處理策略:
(1) Propagate Policy: 拋出原始異常;配置異常的PostHandlingAction=NotifyRethrow;
(2) Wrap Policy: 用另一個異常來封裝原始異常;配置異常的PostHandlingAction=ThrowNewException,添加Wrap Handler並配置WrapExceptionType指定為封裝後的異常類型(可以是自訂類型);
(3) Replace Policy: 用另一個異常來替換原始異常;配置PostHandlingAction=ThrowNewException,添加Replace Handler並配置ReplaceExceptionType指定為替換後的異常類型(可以是自訂類型);
(4) Handle and Resume Policy: 配置異常的PostHandlingAction=None;
(5) Log Only Policy(要用到LAB):配置異常的PostHandlingAction=None,添加Logging Handle,並為FormatterType指定一個Formatter;
(6) Notify Policy:Replace Policy + Log Only Policy.
try
{
// Run code.
}
catch(Exception ex)
{
bool rethrow = ExceptionPolicy.HandleException(ex, " * Policy");//上面建立的異常處理策略
if (rethrow)
throw;
}
4. Exception Handling Application Block的設計: