Enterprise Library Step By Step系列(十一):异常处理应用程序块——入门篇

时间:2021-11-26 08:46:20
  Enterprise Library Step By Step 系列(十一):异常处理应用程序块——入门篇

作者:Terrylee

一.概述

使开发人员和决策人员能够针对发生在企业应用程序体系结构层的异常处理创建一致的策略。它的实现方法如下:

1)它支持整个应用程序体系结构层的异常处理,而不仅限于服务接口的界限。

2)它使得异常处理策略可以在管理层定义和维护,以便决策人员(可能是系统管理员和开发人员)可以定义如何处理异常。他们可以维护和修改控制异常处理的规则集,而无需更改块的应用程序代码。

3)它提供了常用的异常处理功能,例如记录异常信息的功能、通过将原始异常替换为其他异常来隐藏敏感信息的功能,以及通过将原始异常打包到另一个异常中来添加异常的上下文信息的功能。这些功能封装在名为 Exception handlers .NET 类中。

4)它可以合并多个异常处理程序以产生某个异常所需的响应,例如先记录异常信息,再将原始异常替换为其他异常。

5)它使开发人员能够创建自己的异常处理程序。

6)它以一致的方式调用异常处理程序。这意味着,处理程序可以在应用程序之中和之间的多种场合下使用。

常见情况

异常处理应用程序块被设计为支持包含在应用程序组件的 catch 语句中的典型代码。该应用程序块允许开发人员将此逻辑封装为可重用的异常处理程序,而不是在应用程序组件的相同 catch 块中重复这段代码(例如,记录异常信息)。异常处理程序是封装异常处理逻辑和实现名为 IExceptionHandler 的异常处理应用程序块接口的 .NET 类。异常处理应用程序块包含三个异常处理程序:

包装处理程序:此异常处理程序可将一个异常包装到另一个异常中。

替换处理程序:此异常处理程序可将一个异常替换为另一个异常。

日志处理程序:此异常处理程序可格式化异常信息,例如消息和堆栈跟踪等。然后,日志处理程序将该信息提供给企业程序库日志和规范应用程序块,以便可以将它发布。

异常处理应用程序块可让您将异常类型与指定的策略相关联。您可以使用配置控制台来完成此项工作。策略可指定在应用程序块处理特定异常类型时执行的异常处理程序。您可以将这些处理程序串联起来,这样,在处理关联的异常类型时就可以执行一系列处理程序

二.几个重要的概念

1.策略:

确定一系列的异常类型是如何拦截并处理的

每一个策略可以包含多个异常类型

每个应用程序支持多个异常策略

2.异常类型:

可以使用Exception功能的异常类型应该是一个System.Exception类型或从此类继承下来的类

每一个异常类型可以包含一个或多个Handler

每一个异常均可以通过映射到.NET中的特定类型,从而被处理

3.处理器:

异常捕获后进行处理的方式有日志,包装,替换等;

每一个异常类型可以有多个异常处理器;

每一个异常捕获处理器均有机会修改原有异常;

每一个异常捕获处理器均有机会将自己的信息通过异常传递给下一个异常处理程序;

三.编写示例程序:

1.在开始进行配置之前,我们先编写一个异常包装的类。

 1 Enterprise Library Step By Step系列(十一):异常处理应用程序块——入门篇using  System;
 2 Enterprise Library Step By Step系列(十一):异常处理应用程序块——入门篇 using  System.Runtime.Serialization;
 3 Enterprise Library Step By Step系列(十一):异常处理应用程序块——入门篇
 4 Enterprise Library Step By Step系列(十一):异常处理应用程序块——入门篇 namespace  EnterpriseExceptionHandler
 5 Enterprise Library Step By Step系列(十一):异常处理应用程序块——入门篇Enterprise Library Step By Step系列(十一):异常处理应用程序块——入门篇 {
 6Enterprise Library Step By Step系列(十一):异常处理应用程序块——入门篇Enterprise Library Step By Step系列(十一):异常处理应用程序块——入门篇    /// <summary>
 7Enterprise Library Step By Step系列(十一):异常处理应用程序块——入门篇    /// 功能说明:创建一个包装异常的类,需要继承ApplicationException
 8Enterprise Library Step By Step系列(十一):异常处理应用程序块——入门篇    /// 程序作者:Terrylee
 9Enterprise Library Step By Step系列(十一):异常处理应用程序块——入门篇    /// 编写日期:2005年11月13日
10Enterprise Library Step By Step系列(十一):异常处理应用程序块——入门篇    /// </summary>

11Enterprise Library Step By Step系列(十一):异常处理应用程序块——入门篇    public class ExceptionHelper:ApplicationException
12Enterprise Library Step By Step系列(十一):异常处理应用程序块——入门篇Enterprise Library Step By Step系列(十一):异常处理应用程序块——入门篇    {
13Enterprise Library Step By Step系列(十一):异常处理应用程序块——入门篇Enterprise Library Step By Step系列(十一):异常处理应用程序块——入门篇        /// <summary>
14Enterprise Library Step By Step系列(十一):异常处理应用程序块——入门篇        /// 默认的构造函数
15Enterprise Library Step By Step系列(十一):异常处理应用程序块——入门篇        /// </summary>

16Enterprise Library Step By Step系列(十一):异常处理应用程序块——入门篇        public ExceptionHelper() : base() 
17Enterprise Library Step By Step系列(十一):异常处理应用程序块——入门篇Enterprise Library Step By Step系列(十一):异常处理应用程序块——入门篇        {
18Enterprise Library Step By Step系列(十一):异常处理应用程序块——入门篇
19Enterprise Library Step By Step系列(十一):异常处理应用程序块——入门篇        }

20Enterprise Library Step By Step系列(十一):异常处理应用程序块——入门篇
21Enterprise Library Step By Step系列(十一):异常处理应用程序块——入门篇Enterprise Library Step By Step系列(十一):异常处理应用程序块——入门篇        /// <summary>
22Enterprise Library Step By Step系列(十一):异常处理应用程序块——入门篇        /// 序列化错误信息
23Enterprise Library Step By Step系列(十一):异常处理应用程序块——入门篇        /// </summary>
24Enterprise Library Step By Step系列(十一):异常处理应用程序块——入门篇        /// <param name="message">错误信息</param>

25Enterprise Library Step By Step系列(十一):异常处理应用程序块——入门篇        public ExceptionHelper(string message) : base(message) 
26Enterprise Library Step By Step系列(十一):异常处理应用程序块——入门篇Enterprise Library Step By Step系列(十一):异常处理应用程序块——入门篇        {
27Enterprise Library Step By Step系列(十一):异常处理应用程序块——入门篇
28Enterprise Library Step By Step系列(十一):异常处理应用程序块——入门篇        }

29Enterprise Library Step By Step系列(十一):异常处理应用程序块——入门篇
30Enterprise Library Step By Step系列(十一):异常处理应用程序块——入门篇Enterprise Library Step By Step系列(十一):异常处理应用程序块——入门篇        /// <summary>
31Enterprise Library Step By Step系列(十一):异常处理应用程序块——入门篇        /// 序列化错误信息,内部异常产生的原因.
32Enterprise Library Step By Step系列(十一):异常处理应用程序块——入门篇        /// </summary>
33Enterprise Library Step By Step系列(十一):异常处理应用程序块——入门篇        /// <param name="message">错误信息</param>
34Enterprise Library Step By Step系列(十一):异常处理应用程序块——入门篇        /// <param name="exception">引起当前的异常</param>

35Enterprise Library Step By Step系列(十一):异常处理应用程序块——入门篇        public ExceptionHelper(string message, Exception exception) : base(message, exception) 
36Enterprise Library Step By Step系列(十一):异常处理应用程序块——入门篇Enterprise Library Step By Step系列(十一):异常处理应用程序块——入门篇        {
37Enterprise Library Step By Step系列(十一):异常处理应用程序块——入门篇
38Enterprise Library Step By Step系列(十一):异常处理应用程序块——入门篇        }

39Enterprise Library Step By Step系列(十一):异常处理应用程序块——入门篇
40Enterprise Library Step By Step系列(十一):异常处理应用程序块——入门篇Enterprise Library Step By Step系列(十一):异常处理应用程序块——入门篇        /// <summary>
41Enterprise Library Step By Step系列(十一):异常处理应用程序块——入门篇        /// 序列化数据
42Enterprise Library Step By Step系列(十一):异常处理应用程序块——入门篇        /// </summary>
43Enterprise Library Step By Step系列(十一):异常处理应用程序块——入门篇        /// <param name="info">序列化的数据对象</param>
44Enterprise Library Step By Step系列(十一):异常处理应用程序块——入门篇        /// <param name="context">描述.</param>

45Enterprise Library Step By Step系列(十一):异常处理应用程序块——入门篇        protected ExceptionHelper(SerializationInfo info, StreamingContext context) :base(info, context) 
46Enterprise Library Step By Step系列(十一):异常处理应用程序块——入门篇Enterprise Library Step By Step系列(十一):异常处理应用程序块——入门篇        {
47Enterprise Library Step By Step系列(十一):异常处理应用程序块——入门篇
48Enterprise Library Step By Step系列(十一):异常处理应用程序块——入门篇        }

49Enterprise Library Step By Step系列(十一):异常处理应用程序块——入门篇    }

50Enterprise Library Step By Step系列(十一):异常处理应用程序块——入门篇}

51 Enterprise Library Step By Step系列(十一):异常处理应用程序块——入门篇

2.打开配置工具,创建一个异常应用程序块。

 Enterprise Library Step By Step系列(十一):异常处理应用程序块——入门篇

3.创建一个策略。

 Enterprise Library Step By Step系列(十一):异常处理应用程序块——入门篇

4.命名为Wrap Policy

 Enterprise Library Step By Step系列(十一):异常处理应用程序块——入门篇

5.创建一个异常类型Exception

 Enterprise Library Step By Step系列(十一):异常处理应用程序块——入门篇

6.创建一个异常处理器,命名为Wrap Handler,选择它的WrapExceptionTypeName为我们刚才创建的那个异常包装类。

 Enterprise Library Step By Step系列(十一):异常处理应用程序块——入门篇

7.同样,再创建一个替换策略和日志策略,分别命名为Replace PolicyLog Policy,注意Log Policy依赖于日志和监测应用程序块。

8.拷贝目录(我每次都说,大家可能会觉着烦^_^,不过我自己总是忘了这一条,所以不得不每次提醒大家)。

Enterprise Library Step By Step系列(十一):异常处理应用程序块——入门篇copy  " $(ProjectDir)\*.config "   " $(TargetDir) "   >  Nul

9.在程序中编写代码(代码编写很简单)。

 1 Enterprise Library Step By Step系列(十一):异常处理应用程序块——入门篇Enterprise Library Step By Step系列(十一):异常处理应用程序块——入门篇 /// <summary>
 2Enterprise Library Step By Step系列(十一):异常处理应用程序块——入门篇        /// 包装策略
 3Enterprise Library Step By Step系列(十一):异常处理应用程序块——入门篇        /// </summary>
 4Enterprise Library Step By Step系列(十一):异常处理应用程序块——入门篇        /// <param name="sender"></param>
 5Enterprise Library Step By Step系列(十一):异常处理应用程序块——入门篇        /// <param name="e"></param>

 6 Enterprise Library Step By Step系列(十一):异常处理应用程序块——入门篇         private   void  btn_Wrap_Click( object  sender, System.EventArgs e)
 7 Enterprise Library Step By Step系列(十一):异常处理应用程序块——入门篇Enterprise Library Step By Step系列(十一):异常处理应用程序块——入门篇         {
 8Enterprise Library Step By Step系列(十一):异常处理应用程序块——入门篇            try
 9Enterprise Library Step By Step系列(十一):异常处理应用程序块——入门篇Enterprise Library Step By Step系列(十一):异常处理应用程序块——入门篇            {
10Enterprise Library Step By Step系列(十一):异常处理应用程序块——入门篇                Exception ex = new Exception();
11Enterprise Library Step By Step系列(十一):异常处理应用程序块——入门篇                throw ex;
12Enterprise Library Step By Step系列(十一):异常处理应用程序块——入门篇            }

13Enterprise Library Step By Step系列(十一):异常处理应用程序块——入门篇            catch(DllNotFoundException ex)
14Enterprise Library Step By Step系列(十一):异常处理应用程序块——入门篇Enterprise Library Step By Step系列(十一):异常处理应用程序块——入门篇            {
15Enterprise Library Step By Step系列(十一):异常处理应用程序块——入门篇                bool Flag = ExceptionPolicy.HandleException(ex,"Wrap Policy");
16Enterprise Library Step By Step系列(十一):异常处理应用程序块——入门篇
17Enterprise Library Step By Step系列(十一):异常处理应用程序块——入门篇                if(Flag)
18Enterprise Library Step By Step系列(十一):异常处理应用程序块——入门篇Enterprise Library Step By Step系列(十一):异常处理应用程序块——入门篇                {
19Enterprise Library Step By Step系列(十一):异常处理应用程序块——入门篇                    throw;
20Enterprise Library Step By Step系列(十一):异常处理应用程序块——入门篇                }

21Enterprise Library Step By Step系列(十一):异常处理应用程序块——入门篇            }

22Enterprise Library Step By Step系列(十一):异常处理应用程序块——入门篇Enterprise Library Step By Step系列(十一):异常处理应用程序块——入门篇            ///我们可以多次捕获异常
23Enterprise Library Step By Step系列(十一):异常处理应用程序块——入门篇            catch(Exception ex)
24Enterprise Library Step By Step系列(十一):异常处理应用程序块——入门篇Enterprise Library Step By Step系列(十一):异常处理应用程序块——入门篇            {
25Enterprise Library Step By Step系列(十一):异常处理应用程序块——入门篇                bool Flag = ExceptionPolicy.HandleException(ex,"Wrap Policy");
26Enterprise Library Step By Step系列(十一):异常处理应用程序块——入门篇
27Enterprise Library Step By Step系列(十一):异常处理应用程序块——入门篇                if(Flag)
28Enterprise Library Step By Step系列(十一):异常处理应用程序块——入门篇Enterprise Library Step By Step系列(十一):异常处理应用程序块——入门篇                {
29Enterprise Library Step By Step系列(十一):异常处理应用程序块——入门篇                    throw;
30Enterprise Library Step By Step系列(十一):异常处理应用程序块——入门篇                }

31Enterprise Library Step By Step系列(十一):异常处理应用程序块——入门篇            }

32Enterprise Library Step By Step系列(十一):异常处理应用程序块——入门篇        }

33 Enterprise Library Step By Step系列(十一):异常处理应用程序块——入门篇        
34 Enterprise Library Step By Step系列(十一):异常处理应用程序块——入门篇Enterprise Library Step By Step系列(十一):异常处理应用程序块——入门篇         /// <summary>
35Enterprise Library Step By Step系列(十一):异常处理应用程序块——入门篇        /// 替换策略
36Enterprise Library Step By Step系列(十一):异常处理应用程序块——入门篇        /// </summary>
37Enterprise Library Step By Step系列(十一):异常处理应用程序块——入门篇        /// <param name="sender"></param>
38Enterprise Library Step By Step系列(十一):异常处理应用程序块——入门篇        /// <param name="e"></param>

39 Enterprise Library Step By Step系列(十一):异常处理应用程序块——入门篇         private   void  btn_Replace_Click( object  sender, System.EventArgs e)
40 Enterprise Library Step By Step系列(十一):异常处理应用程序块——入门篇Enterprise Library Step By Step系列(十一):异常处理应用程序块——入门篇         {
41Enterprise Library Step By Step系列(十一):异常处理应用程序块——入门篇            try
42Enterprise Library Step By Step系列(十一):异常处理应用程序块——入门篇Enterprise Library Step By Step系列(十一):异常处理应用程序块——入门篇            {
43Enterprise Library Step By Step系列(十一):异常处理应用程序块——入门篇                Exception ex = new Exception();
44Enterprise Library Step By Step系列(十一):异常处理应用程序块——入门篇                throw ex;
45Enterprise Library Step By Step系列(十一):异常处理应用程序块——入门篇            }

46Enterprise Library Step By Step系列(十一):异常处理应用程序块——入门篇            catch(Exception ex)
47Enterprise Library Step By Step系列(十一):异常处理应用程序块——入门篇Enterprise Library Step By Step系列(十一):异常处理应用程序块——入门篇            {
48Enterprise Library Step By Step系列(十一):异常处理应用程序块——入门篇                bool Flag = ExceptionPolicy.HandleException(ex,"Replace Policy");
49Enterprise Library Step By Step系列(十一):异常处理应用程序块——入门篇
50Enterprise Library Step By Step系列(十一):异常处理应用程序块——入门篇                if(Flag)
51Enterprise Library Step By Step系列(十一):异常处理应用程序块——入门篇Enterprise Library Step By Step系列(十一):异常处理应用程序块——入门篇                {
52Enterprise Library Step By Step系列(十一):异常处理应用程序块——入门篇                    throw;
53Enterprise Library Step By Step系列(十一):异常处理应用程序块——入门篇                }

54Enterprise Library Step By Step系列(十一):异常处理应用程序块——入门篇            }

55Enterprise Library Step By Step系列(十一):异常处理应用程序块——入门篇        }

56 Enterprise Library Step By Step系列(十一):异常处理应用程序块——入门篇        
57 Enterprise Library Step By Step系列(十一):异常处理应用程序块——入门篇Enterprise Library Step By Step系列(十一):异常处理应用程序块——入门篇         /// <summary>
58Enterprise Library Step By Step系列(十一):异常处理应用程序块——入门篇        /// 日志策略
59Enterprise Library Step By Step系列(十一):异常处理应用程序块——入门篇        /// </summary>
60Enterprise Library Step By Step系列(十一):异常处理应用程序块——入门篇        /// <param name="sender"></param>
61Enterprise Library Step By Step系列(十一):异常处理应用程序块——入门篇        /// <param name="e"></param>

62 Enterprise Library Step By Step系列(十一):异常处理应用程序块——入门篇         private   void  btn_Log_Click( object  sender, System.EventArgs e)
63 Enterprise Library Step By Step系列(十一):异常处理应用程序块——入门篇Enterprise Library Step By Step系列(十一):异常处理应用程序块——入门篇         {
64Enterprise Library Step By Step系列(十一):异常处理应用程序块——入门篇            try
65Enterprise Library Step By Step系列(十一):异常处理应用程序块——入门篇Enterprise Library Step By Step系列(十一):异常处理应用程序块——入门篇            {
66Enterprise Library Step By Step系列(十一):异常处理应用程序块——入门篇                Exception ex = new Exception();
67Enterprise Library Step By Step系列(十一):异常处理应用程序块——入门篇                throw ex;
68Enterprise Library Step By Step系列(十一):异常处理应用程序块——入门篇            }

69Enterprise Library Step By Step系列(十一):异常处理应用程序块——入门篇            catch(Exception ex)
70Enterprise Library Step By Step系列(十一):异常处理应用程序块——入门篇Enterprise Library Step By Step系列(十一):异常处理应用程序块——入门篇            {
71Enterprise Library Step By Step系列(十一):异常处理应用程序块——入门篇                bool Flag = ExceptionPolicy.HandleException(ex,"Log Policy");
72Enterprise Library Step By Step系列(十一):异常处理应用程序块——入门篇
73Enterprise Library Step By Step系列(十一):异常处理应用程序块——入门篇                if(Flag)
74Enterprise Library Step By Step系列(十一):异常处理应用程序块——入门篇Enterprise Library Step By Step系列(十一):异常处理应用程序块——入门篇                {
75Enterprise Library Step By Step系列(十一):异常处理应用程序块——入门篇                    throw;
76Enterprise Library Step By Step系列(十一):异常处理应用程序块——入门篇                }

77Enterprise Library Step By Step系列(十一):异常处理应用程序块——入门篇            }

78Enterprise Library Step By Step系列(十一):异常处理应用程序块——入门篇        }

10.执行程序,单击日志策略。在事件查看器中查看相应的日志记录。

结束语:异常处理应用程序块相对于其他应用程序块来说是比较简单的,入门篇里就介绍这么多了J