博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Enterprise Library 2.0 -- Exception Handing Applcation Block
阅读量:7116 次
发布时间:2019-06-28

本文共 3501 字,大约阅读时间需要 11 分钟。

           Enterprise Library 2.0 中的 Exception Handing Applcation Block 为我们开发人员以及设计人员提供了一个一致的方法去处理我们整个企业级应用程序的每个层次上的异常,表现在以下几个方面:

1、它为应用程序的架构的每个层提供异常处理方法,并不仅仅局限于服务层接口;
2、提供通用的异常处理方法,比如记录异常信息,使用我们自定义的异常信息来替换系统的异常信息等等;
3、我们可以自己定义异常处理的规则,并且可以不通过修改代码来修改异常处理的规则;
4、它支持我们开发者自己创建自己的异常处理方法;
5、通过同样的方法来调用异常处理方法,这使得异常处理可以用于应用程序的任何地方。

我们在进行异常处理时,一般采用一下策略:

1、包装
2、替换
3、日志

那么,Exception Handing Application Block 究竟能给我们得开发带来哪些好处呢?先看下面的代码:

None.gif
DataSet customersDataSet;
None.gif
None.gif
try
ExpandedBlockStart.gifContractedBlock.gif
dot.gif
{
InBlock.gif  customersDataSet 
= RunQuery("GetAllCustomers");
ExpandedBlockEnd.gif}
None.gif
catch
(Exception ex)
ExpandedBlockStart.gifContractedBlock.gif
dot.gif
{
InBlock.gif  
string formattedInfo = FormatException(ex);
InBlock.gif  Logging.Log(formattedInfo);
InBlock.gif  
throw new DataAccessException("Database access failure for query GetAllCustomers",e);
ExpandedBlockEnd.gif}
None.gif

上面的代码估计我们最熟悉不过了,不错,在我们的应用程序中这样的代码估计会贯穿我们的程序中的每一个角落,但是当我们处理异常的方法发生改变了的时候,我们就要对所有的代码进行修改,这是一件很郁闷的事情,Exception Handing Application Block的出现就为我们解决了这样的麻烦,使用Exception Handing Application Block后,我们只需要修改配置文件就可以改变应用程序中的所有异常处理方法。如下:

None.gif
DataSet customersDataSet;
None.gif
None.gif
try
ExpandedBlockStart.gifContractedBlock.gif
dot.gif
{
InBlock.gif  customersDataSet 
=
 RunQuery(
"
GetAllCustomers
"
);
ExpandedBlockEnd.gif}
None.gif
catch
(Exception ex)
ExpandedBlockStart.gifContractedBlock.gif
dot.gif
{
InBlock.gif  
bool rethrow = ExceptionPolicy.HandleException(ex, "Data Access Policy");
InBlock.gif  
if (rethrow)
InBlock.gif    
throw;
ExpandedBlockEnd.gif}

其中 Data Access Policy 就是一个异常处理的策略,具体的配置和用法我们将在后面说到,当我们的异常处理方式需要改变的话,我们只需要修改配置文件即可,下面我们先来看一下Exception Handing Application Block的配置方法(以日志策略为例):

1、打开配置工具,新建一个Exception Handing Application Block;

6251.gif
2、选中我们刚刚新建的Exception Handing Application Block,右键单击,在弹出的菜单中选择New-->Exception Policy,新建一个异常处理的策略,命名为UI Policy;
6252.gif
6253.gif
3、在新建的异常处理策略下新建一个Exception Type,选择异常类型为System.Exception;
6254.gif
6255.gif
4、设置Exception的PostHandingAction为None,表示异常处理结束之后不执行任何操作,可选项还有ThrowNewException和NotifyRethrow;
6256.gif
5、接下来我们需要在Exception下新建一个Logging Handler
6257.gif
6、设置其FormatterType为Microsoft.Practices.EnterpriseLibrary.ExceptionHandling.TextExceptionFormatter,然后设置LogCategory为DataBase,这里的DataBase是我在Logging Application Block中建的,具体配置方法可以参考下面的文章:
我们还可以设置其EventID,Name,Title等辅助信息:
6258.gif
7、上面的配置结束之后,我们保存我们的Project,就完成了一个日志策略的异常处理的配置,最终的配置文件如下:

None.gif
<?
xml version="1.0" encoding="utf-8"
?>
None.gif
<
configuration
>
None.gif  
<
configSections
>
None.gif    
<
section 
name
="exceptionHandling"
 type
="Microsoft.Practices.EnterpriseLibrary.ExceptionHandling.Configuration.ExceptionHandlingSettings, 
None.gif
None.gifMicrosoft.Practices.EnterpriseLibrary.ExceptionHandling, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null"
 
/>
None.gif  
</
configSections
>
None.gif  
<
exceptionHandling
>
None.gif    
<
exceptionPolicies
>
None.gif      
<
add 
name
="UI Policy"
>
None.gif        
<
exceptionTypes
>
None.gif          
<
add 
type
="System.Exception, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
None.gif            postHandlingAction
="None"
 name
="Exception"
>
None.gif            
<
exceptionHandlers
>
None.gif              
<
add 
logCategory
="DataBase"
 eventId
="100"
 severity
="Error"
 title
="Enterprise Library Exception Handling"
None.gif                formatterType
="Microsoft.Practices.EnterpriseLibrary.ExceptionHandling.TextExceptionFormatter, 
None.gif
None.gifMicrosoft.Practices.EnterpriseLibrary.ExceptionHandling, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null"
None.gif                priority
="0"
 type
="Microsoft.Practices.EnterpriseLibrary.ExceptionHandling.Logging.LoggingExceptionHandler, 
None.gif
None.gifMicrosoft.Practices.EnterpriseLibrary.ExceptionHandling.Logging, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null"
None.gif                name
="Logging Handler"
 
/>
None.gif            
</
exceptionHandlers
>
None.gif          
</
add
>
None.gif        
</
exceptionTypes
>
None.gif      
</
add
>
None.gif    
</
exceptionPolicies
>
None.gif  
</
exceptionHandling
>
None.gif
</
configuration
>

上面的配置做好之后,我们在程序可以根据下面的方法进行日志策略的异常处理:

None.gif
try
ExpandedBlockStart.gifContractedBlock.gif
dot.gif
{
InBlock.gif  
// Run code.
ExpandedBlockEnd.gif
}
None.gif
catch
(Exception ex)
ExpandedBlockStart.gifContractedBlock.gif
dot.gif
{
InBlock.gif  
bool rethrow = ExceptionPolicy.HandleException(ex, "Logging Policy");
InBlock.gif  
if (rethrow)
InBlock.gif    
throw;
ExpandedBlockEnd.gif}

关于替换策略和封装策略的使用方法以及配置方法和日志策略基本上相同,这里就不在多说了。

异常处理这一块我们先说到这里,更深入的部分我会在以后的文章中继续和大家讨论,欢迎大家积极的讨论有关这方面的问题,只有相互交流才能达到共同进步!

Email:pwei013@163.com

转载地址:http://ygghl.baihongyu.com/

你可能感兴趣的文章
trunk端口配置错误导致环路
查看>>
《坟·题记》
查看>>
小女也爱c#(1)
查看>>
css里面的几个你不知道的属性
查看>>
初学js
查看>>
spring-framework-4.2.4.RELEASE-docs
查看>>
iOS开发~制作同时支持armv7,armv7s,arm64,i386,x86_64的静态库.a
查看>>
洛谷P4070 生成魔咒
查看>>
linux下挂载NTFS分区错误修复
查看>>
是C太傻逼?还是C++不够傻逼;
查看>>
Anaconda使用总结
查看>>
JAVA基础◆浅谈3DES加密解密
查看>>
mysql 优化
查看>>
POJ1065/HDOJ1051 Wooden Sticks
查看>>
bui前端框架+yii整理
查看>>
android之间传递list
查看>>
要注意一下xss攻击啊
查看>>
android模拟器(genymotion)+appium+python 框架执行基本原理(目前公司自己写的)...
查看>>
Java并发编程-总纲
查看>>
mac android 安装 apk
查看>>