All articles| All Pictures| All Softwares| All Video| Go home page| Write articles| Upload pictures

Reading number is top 10 articles
asp.net判断文件或文件夹是否存在_[Asp.Net教程]
SQL数据库高级教程:SQL CREATE VIEW 语句_[SQL Server教程]
MS-SQL数据库开发常用汇总_[SQL,Server教程]
在DataList中使用用户控件_[Asp.Net教程]
Asp.net2.0实现Word转换Html,同时分享系列笑话_[Asp.Net教程]
PHP实例:精确到每一秒钟的在线人数显示代码_php资料_编程技术
什么是动态链接库
最基本的sql语句操作_[SQL Server教程]
C#中ProgressBar控件用法以及实例
visual c++类中的多重继承
Reading number is top 10 pictures
Sora aoi on twitter3
Discharge accidentally Actresses by the breast1
Men don't mature ten sign
去瑜伽会所面试的经过
毛俊杰-能量永动机
China's zhejiang university to create the world's most light material
Summer is most suitable for young people to travel in China5
The service WaLiangGe Chinese aircraft carrier1
Embarrassing things comic collection1
Sora aoi mirror memorial classics3
Download software ranking
Eclipse-CALMSANNY (second edition)
卡丁车单机版
Boxer Classic video3
功夫熊猫2(下集)
Ashlynn Video4
Proficient in JavaScript
Tram sex maniac 2 (H) rar bag10
Unix video tutorial5
Sora aoi, the nurse, uniform ,nursing assistant
Proficient in Eclipse
delv published in(发表于) 2014/1/6 8:46:33 Edit(编辑)
.NET,2.0中的企业库异常处理块简述_[Asp.Net教程]

.NET,2.0中的企业库异常处理块简述_[Asp.Net教程]

.NET 2.0中的企业库异常处理块简述_[Asp.Net教程]

企业库异常处理块(Enterprise Library Exception Handling Block)提供了处理异常所需的所有基本代码,现在,你可以不用再编写这些重复性的异常处理代码,只需简单地在程序中使用它们,就可保证一致且高效地异常处理。

  在一个理想的程序世界中,编写的所有代码都是运行无误的,但现实是,无论你在编写代码时多么地小心,错误总会发生,所以,必须要有一个高效、可配置的框架(framework),以一种"优雅"方式来处理错误;另外,也必须要懂得,人们通常以对程序的用户体验带来多大影响,来衡量一种异常处理的有效性。因此,一个好的异常处理解决方案不单是从用户的观点"优雅"地处理错误,而且还可通过开发者或系统管理员以可配置的错误处理行为,提供健壮的配置设定,这也是异常处理块的关键组成部分。

  与Enterprise Library 2.0一同到来的是崭新的异常处理应用程序块,自从老的异常管理应用程序块发布以来,其经过了巨大的改进,可从MSDN下载EntLib Caching Block获得。为有效地使用,你必须接受以下三个主要观点:

  ·异常处理是在你的代码探测到有异常发生时,处理异常的一个过程。

  ·异常日志记录是记录一个异常的过程,其包括发送格式化异常到事件记录器或发送一封E-mail,而异常处理块则利用了日志记录和事件记录。

  ·异常处理策略允许你控制异常处理和使用外部配置文件记录的行为,这样就的好处是,现在不用在代码中实施这样的规则了,换句话来说,你可在一个策略文件中定义异常处理,然后,在不改变代码的情况下,在测试、调试、产品定型期间修改行为以适应不同的异常处理需要。

  另外,使用异常处理块,在探测到异常时,可做以下三件事情:

  ·你可把异常包装为一个新的异常,并加入新的上下文信息或错误详细信息。当新的异常传递到调用堆栈时,仍可通过InnerException属性访问到原始的异常。

  ·你可用一个新的异常取代原有异常。一般来说,这样做的目的,是不想让原始异常的详细信息传递出程序。

  ·你可以记录异常。当然,也可结合使用包装或取代的方法来达到此目的,或者,你可以记录原始异常并把它传递到调用堆栈。

  使用异常处理块

  在安装完企业库(Enterprise Library)之后,就可利用异常处理块开始编写代码了,为正确使用异常处理块,请遵循以下步骤:

  1、在你的解决方案中分别添加一个对Microsoft.Practices.EnterpriseLibrary.Common.dll和Microsoft.Practices.EnterpriseLibrary.ExceptionHandling.dll程序集的引用,可使用"添加引用"选项,并定位到X:\Program Files\Microsoft Enterprise Library January 2006\bin文件夹,如果还想使用异常处理日志记录,请再添加一个对Microsoft.Practices.EnterpriseLibrary.ExceptionHandling.Logging.dll的引用。

  2、像如下所示,在根<configuration>下的<configSections>中添加必要的项目到你的app.config(Windows Forms)或web.config(ASP.NET程序)文件。


<section
name="exceptionHandling"
type="Microsoft.Practices.
EnterpriseLibrary.
ExceptionHandling.
Configuration.
ExceptionHandlingSettings,
Microsoft.Practices.
EnterpriseLibrary.
ExceptionHandling" />

  3、如果随同异常处理一块使用日志记录,还需要在<configSections>中加入以下设置。


<section
name="loggingConfiguration"
type="Microsoft.Practices.
EnterpriseLibrary.Logging.
Configuration.LoggingSettings,
Microsoft.Practices.
EnterpriseLibrary.Logging" />

  4、接下来,直接在<configuration>下添加<exceptionHandling>,在<exceptionHandling>之内,你可添加所有的异常处理策略,以下的代码,表示在<exceptionHandling>中指定了一个名为"Global Policy"的策略。


<exceptionHandling>
<exceptionPolicies>
<add name="Global Policy">
<exceptionTypes>
<add name="Exception"
type="System.Exception,
mscorlib, Version=2.0.0.0,
Culture=neutral,
PublicKeyToken=b77a5c561934e089"
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),在企业库配置工具中,上述设置如图1所示。



图1


  5、 在你的工程中引入异常处理块的核心命名空间"Microsoft.Practices.EnterpriseLibrary.ExceptionHandling"。

  6、 现在,就可使用上述命名空间中的类编写代码了。


  使用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"按钮,将看到图2所示的消息框。



图2

  记录一个异常

  除了处理异常之外,你也可对异常处理块进行配置以记录下异常。正如前面所提到的,可在日志记录块(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方法,与异常策略类似,你可在app.config或web.config文件中指定记录配置信息,例如,下面所示的app.config代码把"Log Only Policy"配置为<exceptionPolicies>下的一个子项:


<add name="Log Only Policy">
<exceptionTypes>
<add name="Exception"
type="System.Exception, mscorlib,
Version=2.0.0.0, Culture=neutral,
PublicKeyToken=b77a5c561934e089"
postHandlingAction="None">
<exceptionHandlers>
<add logCategory="Default Category"
eventId="100" severity="Error"
title="Exception Management
Application Exception"
priority="0"
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>

  相应作为演示的目的,日志记录块只是简单地在"应用程序"项中记录下异常,如图3所示。



图3

  注意,app.config文件中的记录配置信息控制着日志项的格式。

  从本文中,你已看到,异常处理块提供了一组高度复用的类,由此就不必再重复编写那些操作、处理、记录异常的代码了;通过使用这些类,你可减少程序中错误、bug,及节省打字输入的时间,集中精力在程序的核心业务逻辑上,从而可极大地提高生产率。
作者:谢启东编译 来源:天极开发





添加到del.icio.us 添加到新浪ViVi 添加到百度搜藏 添加到POCO网摘 添加到天天网摘365Key 添加到和讯网摘 添加到天极网摘 添加到黑米书签 添加到QQ书签 添加到雅虎收藏 添加到奇客发现 diigo it 添加到饭否 添加到飞豆订阅 添加到抓虾收藏 添加到鲜果订阅 digg it 貼到funP 添加到有道阅读 Live Favorites 添加到Newsvine 打印本页 用Email发送本页 在Facebook上分享


Disclaimer Privacy Policy About us Site Map

If you have any requirements, please contact webmaster。(如果有什么要求,请联系站长)
Copyright ©2011-
uuhomepage.com, Inc. All rights reserved.