Exception Handling Applicaton Blcok(学习笔记)

1. 解决的问题:
(1) 它支持整个应用程序体系结构层的异常处理,而不仅限于服务接口的界限。 
(2) 它使得异常处理策略可以在管理层定义和维护,以便决策人员(可能是系统管理员和开发人员)可以定义如何处理异常。他们可以维护和修改控制异常处理的规则集,而无需更改块的应用程序代码。
(3) 它提供了常用的异常处理功能,例如记录异常信息的功能、通过将原始异常替换为其他异常来隐藏敏感信息的功能,以及通过将原始异常打包到另一个异常中来添加异常的上下文信息的功能。这些功能封装在名为 exception handlers 的 .NET 类中。 
(4) 它可以合并多个异常处理程序以产生某个异常所需的响应,例如先记录异常信息,再将原始异常替换为其他异常。 
(5) 它使开发人员能够创建自己的异常处理程序。 
(6) 它以一致的方式调用异常处理程序。这意味着,处理程序可以在应用程序之中和之间的多种场合下使用。

2. 适用场景:
    异常处理应用程序块被设计为支持包含在应用程序组件的 catch 语句中的典型代码。该应用程序块允许开发人员将此逻辑封装为可重用的异常处理程序,而不是在应用程序组件的相同 catch 块中重复这段代码(例如,记录异常信息)。异常处理程序是封装异常处理逻辑和实现名为 IExceptionHandler 的异常处理应用程序块接口的 .NET 类。异常处理应用程序块包含四个异常处理程序:
(1) 包装处理程序(Wrap Handler)。此异常处理程序可将一个异常包装到另一个异常中。
(2) 替换处理程序(Replace Handler)。此异常处理程序可将一个异常替换为另一个异常。
(3) 日志处理程序(Logging Handler)。此异常处理程序可格式化异常信息,例如消息和堆栈跟踪等。然后,日志处理程序将该信息提供给企业程序库日志和规范应用程序块,以便可以将它发布。
(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的设计:

原文地址:https://www.cnblogs.com/engine1984/p/1047527.html