知识大全 .NET中的企业库异常处理块简述
Posted 知
篇首语:等不到的晚安就别等了,挤不进的世界就别挤了。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 .NET中的企业库异常处理块简述相关的知识,希望对你有一定的参考价值。
.NET中的企业库异常处理块简述 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
企业库异常处理块(Enterprise Library Exception Handling Block)提供了处理异常所需的所有基本代码 现在 你可以不用再编写这些重复性的异常处理代码 只需简单地在程序中使用它们 就可保证一致且高效地异常处理 在一个理想的程序世界中 编写的所有代码都是运行无误的 但现实是 无论你在编写代码时多么地小心 错误总会发生 所以 必须要有一个高效 可配置的框架(framework) 以一种 优雅 方式来处理错误 另外 也必须要懂得 人们通常以对程序的用户体验带来多大影响 来衡量一种异常处理的有效性 因此 一个好的异常处理解决方案不单是从用户的观点 优雅 地处理错误 而且还可通过开发者或系统管理员以可配置的错误处理行为 提供健壮的配置设定 这也是异常处理块的关键组成部分 与Enterprise Library 一同到来的是崭新的异常处理应用程序块 自从老的异常管理应用程序块发布以来 其经过了巨大的改进 可从MSDN下载EntLib Caching Block获得 为有效地使用 你必须接受以下三个主要观点 ·异常处理是在你的代码探测到有异常发生时 处理异常的一个过程 ·异常日志记录是记录一个异常的过程 其包括发送格式化异常到事件记录器或发送一封E mail 而异常处理块则利用了日志记录和事件记录 ·异常处理策略允许你控制异常处理和使用外部配置文件记录的行为 这样就的好处是 现在不用在代码中实施这样的规则了 换句话来说 你可在一个策略文件中定义异常处理 然后 在不改变代码的情况下 在测试 调试 产品定型期间修改行为以适应不同的异常处理需要 另外 使用异常处理块 在探测到异常时 可做以下三件事情 ·你可把异常包装为一个新的异常 并加入新的上下文信息或错误详细信息 当新的异常传递到调用堆栈时 仍可通过InnerException属性访问到原始的异常 ·你可用一个新的异常取代原有异常 一般来说 这样做的目的 是不想让原始异常的详细信息传递出程序 ·你可以记录异常 当然 也可结合使用包装或取代的方法来达到此目的 或者 你可以记录原始异常并把它传递到调用堆栈 使用异常处理块 在安装完企业库(Enterprise Library)之后 就可利用异常处理块开始编写代码了 为正确使用异常处理块 请遵循以下步骤 在你的解决方案中分别添加一个对Microsoft Practices EnterpriseLibrary Common dll和Microsoft Practices EnterpriseLibrary ExceptionHandling dll程序集的引用 可使用 添加引用 选项 并定位到X:\\Program Files\\Microsoft Enterprise Library January \\bin文件夹 如果还想使用异常处理日志记录 请再添加一个对Microsoft Practices EnterpriseLibrary ExceptionHandling Logging dll的引用 像如下所示 在根<configuration>下的<configSections>中添加必要的项目到你的nfig(Windows Forms)或nfig(ASP NET程序)文件 <sectionname= exceptionHandling type= Microsoft Practices EnterpriseLibrary ExceptionHandling Configuration ExceptionHandlingSettings Microsoft Practices EnterpriseLibrary ExceptionHandling /> 如果随同异常处理一块使用日志记录 还需要在<configSections>中加入以下设置 <sectionname= loggingConfiguration type= Microsoft Practices EnterpriseLibrary Logging Configuration LoggingSettings Microsoft Practices EnterpriseLibrary Logging />接下来 直接在<configuration>下添加<exceptionHandling> 在<exceptionHandling>之内 你可添加所有的异常处理策略 以下的代码 表示在<exceptionHandling>中指定了一个名为 Global Policy 的策略
<exceptionHandling><exceptionPolicies> <add name= Global Policy ><exceptionTypes><add name= Exception type= System Exception mscorlib Version= Culture=neutral PublicKeyToken=b a c e postHandlingAction= None ><exceptionHandlers><add name= Application Message Handler type= ExceptionMgmtBlockExample AppMessageExceptionHandler ExceptionMgmtBlockExample /></exceptionHandlers></add></exceptionTypes></add></exceptionPolicies></exceptionHandling>
上述的设置指定了处理所有异常的一个策略 另外 使用<exceptionHandlers>项 你可指定一个自定义的异常处理方法 其将以适当的方式处理异常 在这个例子中 自定义异常处理方法实现为一个名为AppMessageExceptionHandler的类 而在本文的后面部分 将会看到AppMessageExceptionHandler类具体的实现 属性postHandlingAction指定了处理基于策略的异常的行为 此属性可接受以下值 None NotifyRethrow ThrowNewException 添加这些设置最简单的方法就是使用企业库中的企业库配置工具(Enterprise Library Configuration Tool) 在企业库配置工具中 上述设置如图 所示
图
在你的工程中引入异常处理块的核心命名空间 Microsoft Practices EnterpriseLibrary ExceptionHandling 现在 就可使用上述命名空间中的类编写代码了
使用ExceptionPolicy类 只要使用异常处理块 就必须要与ExceptionPolicy类打交道 由其引出的名为HandleException()的静态方法允许客户端程序与异常处理块相交互 在此可把策略作为参数提供 HandleException()方法使用一个类工厂来为相应的策略创建ExceptionPolicyImpl类型的对象 而ExceptionPolicyImpl对象拥有一个ExceptionPolicyEntry对象集 即在相应策略的配置文件中 每一种异常类型都对应于一个对象 对每一种异常类型 ExceptionPolicyEntry对象都包含了一个对象集 并由其实现了IExceptionHandler接口 当执行策略时 对象集就可提供异常处理块使用的序列 且每一个实现IExceptionHandler接口的对象都与对应于每种处理方法的类型相关联 异常处理方法是 NET类 其包装了异常处理逻辑 并实现了定义在异常处理块中的IExceptionHandler接口 默认状态下 异常处理块包含以下三种异常处理方法 ·包装处理方法 此异常处理方法用一个异常包装了另一个异常 ·取代处理方法 此异常处理方法用一个异常取代了另一个异常 ·日志记录处理方法 此异常处理方法对异常信息进行格式化处理 如通知和堆栈跟踪 日志记录处理方法将把这些信息登记入日志块 以作日后查证 如果需要实现你自己的处理方法 通过使用企业库配置工具 也可自行扩展异常处理块 由此带来的最大好处是 你不必仅仅为了扩展它 而修改和重新构建整个程序 使用ExceptionPolicy来处理异常 为演示异常处理块的使用 下面有一个简单的例子 例如一个名为ExceptionMgmtBlockExample 简单的Windows Form程序 在Visual Studio中创建此工程 添加前面所提到的引用 在窗体设计器中打开默认窗体 加入一个名为btnHandleException的命令按钮 修改它的单击事件如下 private void btnHandleException_Click (object sender EventArgs e) try throw new Exception( This is a test exception ); catch (Exception ex) bool rethrow = ExceptionPolicy HandleException (ex Global Policy ); if (rethrow) throw; 在try块中 只是简单地抛出一个异常 而catch块将会捕捉到它 从而触发ExceptionPolicy类中的HandleException()方法 并在其中传递了一个 Golbal Policy 的策略名参数 正如前一节所提到的 Golbal Policy 与名为AppMessageExceptionHandler的异常处理方法相关联 其声明如下
using System;using System Collections Specialized;using System Windows Forms;using Microsoft Practices EnterpriseLibrary Common Configuration;using Microsoft Practices EnterpriseLibrary Common Configuration ObjectBuilder;using Microsoft Practices EnterpriseLibrary ExceptionHandling;using Microsoft Practices EnterpriseLibrary ExceptionHandling Configuration;namespace ExceptionMgmtBlockExample [ConfigurationElementType (typeof(CustomHandlerData))] public class AppMessageExceptionHandler : IExceptionHandler public AppMessageExceptionHandler(NameValueCollection ignore) public Exception HandleException (Exception exception Guid correlationID) DialogResult result = this ShowThreadExceptionDialog (exception); if (result == DialogResult Abort) Application Exit(); return exception; private DialogResult ShowThreadExceptionDialog(Exception e) string errorMsg = e Message + Environment NewLine + Environment NewLine; return MessageBox Show(errorMsg Application Error MessageBoxButtons OK MessageBoxIcon Stop);
正如你所看到的 自定义的异常处理方法继承自IExceptionHandler接口 而HandleException方法触发了另一个名为ShowThreadExceptionDialog的方法 其将格式化异常信息并在屏幕上显示 如果你运行这个程序 并单击 Handle Exception 按钮 将看到图 所示的消息框
图
记录一个异常 除了处理异常之外 你也可对异常处理块进行配置以记录下异常 正如前面所提到的 可在日志记录块(Logging Block)的帮助之下完成这项工作 为进行日志记录的演示 再添加一个名为btnLogException的按钮 并修改它的单击事件如下
private void btnLogException_Click(object sender EventArgs e) try throw new Exception ( This is a test exception ); catch (Exception ex) bool rethrow = ExceptionPolicy HandleException (ex Log Only Policy ); if (rethrow) throw;
通过传递异常对象(ex)和策略(本例中为Log Only Policy) catch块将会触发ExceptionPolicy HandleException方法 与异常策略类似 你可在nfig或nfig文件中指定记录配置信息 例如 下面所示的nfig代码把 Log Only Policy 配置为<exceptionPolicies>下的一个子项
<add name= Log Only Policy ><exceptionTypes><add name= Exception type= System Exception mscorlib Version= Culture=neutral PublicKeyToken=b a c e postHandlingAction= None ><exceptionHandlers><add logCategory= Default Category eventId= severity= Error title= Exception Management Application Exception priority= formatterType= Microsoft Practices EnterpriseLibrary ExceptionHandling TextExceptionFormatter Microsoft Practices EnterpriseLibrary ExceptionHandling name= Logging Handler type= Microsoft Practices EnterpriseLibrary ExceptionHandling Logging LoggingExceptionHandler Microsoft Practices EnterpriseLibrary ExceptionHandling Logging /></exceptionHandlers></add></exceptionTypes></add>
相应作为演示的目的 日志记录块只是简单地在 应用程序 项中记录下异常 如图 所示
图
注意 nfig文件中的记录配置信息控制着日志项的格式
cha138/Article/program/net/201311/11494相关参考
ASP.Net之C#中的异常处理 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 基础知识 程序
ASP.Net之C#中的异常处理[2] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! &
ASP.Net之C#中的异常处理[1] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! &
ASP.NET事务处理和异常处理 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!使用SQLTrans
ASP.NET全局异常处理浅析 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 在我们写程序时偶尔
ASP.NET中异常处理使用 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 通用语言运行时(CL
.NET的异常处理的几个误区 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! Net出现多年之后还
1.呕吐及返流:多因饱胃、肠梗阻、喷门阻力降低及面罩加压给氧方法不当所致。术前应采取防范措施。一旦发生应立即将病人置于头低位,并偏向一侧,及时清除呕吐返流物。 2.舌后坠:多因咬肌松驰所致。可托起下
ASP.NET中处理异常的几种方式 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 程序中使用tr
ASP.NET开发宝典:网页中的代码块语法 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! &nb