使用 Enterprise Library 异常处理应用程序块开发
此文档维护在:http://wiki.entlib.net.cn/EntlibHelp31ExceptionHandlingApplicationBlock.ashx。
本主题描述了如何使用异常处理应用程序块开发应用程序。它首先解释了如何在应用程序中引用应用程序块并且配置它。然后,在关键场景中,它描述了用于应用程 序的异常处理策略,并且解释了如何根据特定场景,如记录日志和传播异常,使用应用程序块。最后,在开发任务的细节中,它解释了如何开发异常处理策略,以及 如何发送异常到应用程序块。
所有应用程序块都发布为源代码,在快速入门和配置工具被使用之前必须编译它们。要学习如何编译 Enterprise Library 源代码,请参见生成 Enterprise Library。
添加异常处理应用程序块
配置异常处理策略
配置异常处理程序
在添加异常的异常处理程序后,可以配置它。这些过程解释了如何配置自定义的、记录日志的、替换和包装异常处理程序。
配置定制的异常处理程序
要配置一个日志异常处理程序,单击 Logging Handler 节点,然后输入下面这些显示在右面板中的值:
要配置一个替换处理程序,单击 Replace Handler 节点,然后输入下列显示在右面板中的值:
要配置一个包装处理程序,单击 Wrap Handler 节点然后输入下面显示在右面板中的值:
配置文件中有下面的节处理程序声明。
节处理程序场景包括配置设置节的名称和处理在那节中配置数据的节处理程序类名。配置设置节的名称是 exceptionHandling。节处理程序类名是 ExceptionHandlingSettings 。此类包含在 Microsoft.Practices.EnterpriseLibrary.ExceptionHandling.Configuration 命名空间中。
exceptionHandling 元素
exceptionHandling 元素描述了异常应用程序块的配置。此元素是必须的。
属性和子元素
下面这些节描述了 exceptionHandling 元素的属性和子元素。
exceptionPolicies 子元素
exceptionPolicies 元素是 exceptionHandling 元素的子元素。它列出了应用程序可以调用的异常策略。此元素是可选的。
add 子元素
add 元素是 exceptionPolicies 元素的子元素。add 元素添加异常策略的名称。此元素是可选的,可以有多个 add 元素。
属性
表 1 列出了 add 元素的属性。
exceptionTypes 子元素
exceptionTypes 元素是 add 元素的子元素。它列出了可以被异常策略处理的异常类型。此属性是可选的。
add 子元素
add 元素是 exceptionTypes 元素的子元素,add 元素添加异常类型的名称。此元素是可选的,可以有多个 add 元素。
属性
表 2 列出了 add 元素的属性。
exceptionHandlers 子元素
exceptionHandlers 元素是 add 元素的子元素,它指定了一个异常处理程序,此元素是必须的。
add 子元素
add 元素是 exceptionHandlers 元素的一个子元素。add 元素添加异常类型的名称。此元素是可选的,可以有多个 add 元素。
属性
表 3 列出了用于 add 元素的属性。
准备应用程序以使用异常处理应用程序块
下一步,添加应用程序代码。通常,使用异常处理应用程序块的代码必须完成下列步骤:
在此节中的示例展示了如何将这些步骤合并到应用程序中去。
本主题描述了如何使用异常处理应用程序块开发应用程序。它首先解释了如何在应用程序中引用应用程序块并且配置它。然后,在关键场景中,它描述了用于应用程 序的异常处理策略,并且解释了如何根据特定场景,如记录日志和传播异常,使用应用程序块。最后,在开发任务的细节中,它解释了如何开发异常处理策略,以及 如何发送异常到应用程序块。
所有应用程序块都发布为源代码,在快速入门和配置工具被使用之前必须编译它们。要学习如何编译 Enterprise Library 源代码,请参见生成 Enterprise Library。
2.1 - 输入配置信息
这些过程解释了如何配置异常处理应用程序块,与出现在右面板中的节点相关的属性。添加异常处理应用程序块
- 打开配置文件。更多信息,请参见配置应用程序块。
- 右单击Application Configuration,指向 New ,然后单击 Exception Handling Application Block。
配置异常处理策略
- 要添加异常处理策略,右单击 ExceptionHandlingApplicationBlock 节点,指向 New ,然后单击 ExceptionPolicy ,这创建了一个异常处理策略节点。默认情况下,此异常处理策略被命名为 Exception Policy 。
- 重命名策略(可选的)。右单击策略节点,单击 Rename ,然后输入想要的策略名称。
- 添加异常类型到策略,右单击策略节点,指向 New ,然后单击 Exception Type。在 Type Selector 对话框中选择异常的类型。如果所要的类型没有列出来,单击 Type Selector 对话框上的 LoadAssembly 以查找包含所要的类型的程序集。单击 OK 。这将创建一个 Exception 节点。节点的属性被显示在右面板中。
- 选择想要的 PostHandlingAction 。PostHandlingAction 决定了在异常处理链完成后将发生什么活动。默认情况下,PostHandlingAction 被设置为 NotifyRethrow 。它的可能值如下:
- None。应用程序块为此异常执行所有的处理程序,然后在 HandleException 方法的调用点上返回 false 给应用程序。应用程序检查此值以继续运行。
- NotifyRethrow。应用程序块为此异常执行所有的处理程序,然后在 HandleException 方法的调用点上返回 true 给应用程序。应用程序检查到此值就重新抛出原始异常。
- ThrowNewException。应用程序块为此异常执行所有的处理程序,然后在所有处理程序运行后抛出存在的异常。
- 要添加异常处理程序,右单击 Exception 节点,指向 New ,然后单击想要的异常处理程序的类型:
- Custom Handler。此异常处理程序让你配置定制的异常处理程序。单击 Type Selector 上的 LoadAssembly 以添加定制的处理程序。
- Logging Handler。此异常处理程序格式化异常信息,然后使用日志应用程序块记录异常信息。在选择一个日志处理程序时,日志应用程序块会自动被添加到应用程序的配置中。更多信息,请参见日志应用程序块的文档。
- Replace Handler。此异常处理程序用另一个异常替换一个异常。
- Wrap Handler。此异常处理程序将一个异常包装到另一个异常中。
配置异常处理程序
在添加异常的异常处理程序后,可以配置它。这些过程解释了如何配置自定义的、记录日志的、替换和包装异常处理程序。
配置定制的异常处理程序
- 单击树视图中的定制处理程序。
- 在右面板中 Attributes 属性节中单击省略号按钮(…)。
- 在 EditableKeyValueCollectionEditor 对话框中,单击 Add 添加新的名称/值对。
- 在 EditableKeyValueCollectionEditor 对话框的右面板中,输入键名称和属性的值。
- 适当的添加更多的名称/值对,然后单击 OK。
- 在放置在配置控制台右面板中的 Name 属性中,如果需要,修改异常处理应用程序块的名称。默认的名称为 Custom Handler 。
- 单击右面板的 Type 属性节中的省略号按钮(…)。如果想要的类型没有包含在 Assemblies 文件夹中,单击在 TypeSelector 上的 LoadAssembly 来查找包含所需要的类型的程序集。
要配置一个日志异常处理程序,单击 Logging Handler 节点,然后输入下面这些显示在右面板中的值:
- EventID。这是将被记入日志的 ID 数。默认值为 100。如果需要,可以输入不同的值。
- FormatterType。这是用于异常信息在记入日志前格式化异常信息的格式化程序的全名称。单击省略号按钮(…),然后使用 TypeSelector 选择要使用的格式化程序。
- LogCategory。这是事件将被指派的日志分类的名称。默认名称是 DefaultCategory ,可以输入想要的不同的分类名称。
- Name。这是日志异常处理程序的名称。默认名称是 LoggingHandler。如果需要,可以修改名称。
- Priority。这是日志消息的优先级。日志应用程序块可以配置成根据它们的优先级来过滤日志消息。
- Severity。这是事件的严重程度。默认值为 Error。要选择另一个级别的严重程序,单击在下拉列表中的另一个条目。其他的选择是 Critical、Warning、Information、Verbose、Start、Stop、Suspend、Resume 和 Transfer。
- Title。这是日志条目的标题。默认值是 EnterpriseLibraryExceptionHandling,如果需要,可以修改它。
要配置一个替换处理程序,单击 Replace Handler 节点,然后输入下列显示在右面板中的值:
- ExceptionMessage。这是用于替换的异常的消息文本,此属性是可选的。
- Name。这是替换处理程序的名称。默认的名称是 ReplaceHandler。如果需要,可以修改它。
- ReplaceExceptionType。这是将替换原始异常的异常类型的全名称。默认的类型是 System.Exception。如果它不是想要的,使用 TypeSelector 来单击想要的类型。
要配置一个包装处理程序,单击 Wrap Handler 节点然后输入下面显示在右面板中的值:
- ExceptionMessage。这是用于包装异常的消息文本,此属性是可选的。
- Name。这是包装处理程序的名称。默认的名称是 WrapHandler。如果需要,可以修改它。
- WrapExceptionType。这是将包装原始异常的异常类型的全名称。默认值是 System.Exception 。如果这不是想要的,使用 TypeSelector 来单击想要的类型。
2.1.1 - 异常应用程序块的源模式
本主题列出了用于异常处理应用程序块的 XML 元素和属性。可以手工编辑这些 XML 数据,但是 Enterprise Library 配置控制台极大的简化了此任务。如果选择手工编辑 XML ,请使用包含在本主题中的模式信息。配置文件中有下面的节处理程序声明。
<configSections>
<section name="exceptionHandling"
type="Microsoft.Practices.EnterpriseLibrary.ExceptionHandling.Configuration.ExceptionHandlingSettings,
Microsoft.Practices.EnterpriseLibrary.ExceptionHandling,
Version=3.1.0.0,
Culture=neutral,
PublicKeyToken=null" />
</configSections>
节处理程序场景包括配置设置节的名称和处理在那节中配置数据的节处理程序类名。配置设置节的名称是 exceptionHandling。节处理程序类名是 ExceptionHandlingSettings 。此类包含在 Microsoft.Practices.EnterpriseLibrary.ExceptionHandling.Configuration 命名空间中。
exceptionHandling 元素
exceptionHandling 元素描述了异常应用程序块的配置。此元素是必须的。
属性和子元素
下面这些节描述了 exceptionHandling 元素的属性和子元素。
exceptionPolicies 子元素
exceptionPolicies 元素是 exceptionHandling 元素的子元素。它列出了应用程序可以调用的异常策略。此元素是可选的。
add 子元素
add 元素是 exceptionPolicies 元素的子元素。add 元素添加异常策略的名称。此元素是可选的,可以有多个 add 元素。
属性
表 1 列出了 add 元素的属性。
属性 | 描述 |
---|---|
name | 异常策略的名称。名称在节中必须是唯一的,此属性是必须的。 |
exceptionTypes 子元素
exceptionTypes 元素是 add 元素的子元素。它列出了可以被异常策略处理的异常类型。此属性是可选的。
add 子元素
add 元素是 exceptionTypes 元素的子元素,add 元素添加异常类型的名称。此元素是可选的,可以有多个 add 元素。
属性
表 2 列出了 add 元素的属性。
属性 | 描述 |
---|---|
name | 异常类型的名称。名称在节中必须是唯一的,此属性是必须的。 |
type | 派生自 Exception 类的类名,此属性是必须的。 |
postHandlingAction | 指定在调用异常处理程序后将进行什么异常策略。可能的值是 None、NotifyRethrow 和 ThrowNewException。此属性是必须的。 |
exceptionHandlers 子元素
exceptionHandlers 元素是 add 元素的子元素,它指定了一个异常处理程序,此元素是必须的。
add 子元素
add 元素是 exceptionHandlers 元素的一个子元素。add 元素添加异常类型的名称。此元素是可选的,可以有多个 add 元素。
属性
表 3 列出了用于 add 元素的属性。
属性 | 描述 |
---|---|
name | 异常处理程序的名称。名称必须在节中是唯一的。此属性是必须的。 |
type | 实现了 IExceptionHandler 接口的类的名称。此属性是必须的。 |
exceptionMessage | 由异常使用的消息。此属性用于 WrapHandler 类和 ReplaceHandler ,它是必须的。 |
wrapExceptionType | 包装原始异常的异常类型。它必须有一个派生自 Exception 类的类名。此属性和 WrapHandler 类一起使用,并且是必须的。 |
replaceExceptionType | 替换原始异常的异常类型。它必须有一个派生自 Exception 类的类名。此属性和 ReplaceHandler 类一起使用,并且是必须的。 |
logCategory | 记录异常消息日志的分类。此属性是一个字符串。它与 LoggingExceptionHandler 一起使用,并且是必须的。 |
eventId | 异常的 ID 数量。此属性是一个整数。它与 LoggingExceptionHandler一起使用,并且是必须的。 |
severity | 异常的严重程序。此属性是 TraceEventType 枚举类型的。它与 LoggingExceptionHandler 类一起使用,并且是必须的。 |
title | 日志条目的标题。此属性是一个字符串。它与 LoggingExceptionHandler 类一起使用,并且是必须的。 |
formatterType | 在异常被记录日志前格式化异常消息的格式化程序。它必须是一个派生自 ExceptionFormatter 类的类名。它与 LoggingExceptionHandler 类一起使用,并且是必须的。 |
priority | 日志条目的优先级。此属性是一个整数。它与 LoggingExceptionHandler 类一起使用,并且是必须的。 |
2.2 - 添加应用程序代码
异常处理应用程序块被设计以支持绝大多数处理异常的常见场景。在添加应用程序代码时,参考在关键场景中的场景,然后选择最适合的情况。使用展示在这里的完成场景的代码,或者按需要适配它。准备应用程序以使用异常处理应用程序块
- 添加到异常处理应用程序块程序集的引用。在 Visual Studio 中,在解决方案浏览器中右单击项目节点,然后单击添加引用。单击浏览选项卡,选择 Microsoft.Practices.EnterpriseLibrary.ExceptionHandling.dll 程序集,然后单击 OK。
- 按同样的步骤,设置到 Enterprise Library 内核程序集:Microsoft.Practices.EnterpriseLibrary.Common.dll 和 Microsoft.Practices.ObjectBuilder.dll 的引用。如果配置了应用程序使用日志异常处理程序,设置到需要的日志应用程序块程序集的引用。关于日志应用程序块程序集的信息,请参见日志应用程序块的文档。
- (可选的)要不用全路径名称的方式使用来自异常处理应用程序块的元素,可以添加下列 using 语句(C#)或者 Imports 语句(Visual Basic)到源代码文件的顶部。
C#
using Microsoft.Practices.EnterpriseLibrary.ExceptionHandling;
Visual Basic
Imports Microsoft.Practices.EnterpriseLibrary.ExceptionHandling
注意:对于 Visual Basic 项目,可以使用项目设计器的引用页来管理引用和导入命名空间。要访问引用页,在解决方案浏览器中选择项目节点,在项目菜单中单击属性。在项目设计器出现时,单击引用标签。
下一步,添加应用程序代码。通常,使用异常处理应用程序块的代码必须完成下列步骤:
- 捕获异常。
- 处理异常策略。
- 重新抛出原始异常,如果那是策略所推荐的。
在此节中的示例展示了如何将这些步骤合并到应用程序中去。