Enterprise LibraryV1.0-异常处理应用程序块使用说明

来源:互联网 发布:淘宝的运作模式 编辑:程序博客网 时间:2024/06/05 08:57
其他几个应用程序块的使用说明连接如下: Enterprise LibraryV1.0-概述 Enterprise LibraryV1.0-配置应用程序块 Enterprise LibraryV1.0-安全应用程序块使用说明 Enterprise LibraryV1.0-数据应用程序块 Enterprise LibraryV1.0-日志应用程序块使用说明 Enterprise LibraryV1.0-加密应用程序块使用说明 1、简介 只要是编写代码,我们就会面对异常处理的问题。系统预定义异常由于肩负着提示、调试等很多功能,因此当异常发生时,会有非常详细的异常信息。当我们编写商用程序时,如果程序出现运行时异常,显示给用户的信息都要求是user-friendly的,而不是系统级,特别是系统预定义异常会deliver一些敏感信息,如果被别有用心的人获取,是非常危险的,所以当异常出现时,我们要屏蔽掉这些敏感信息。对异常的处理一般有四种方式: 根据源异常建立一个新异常,重新将此新异常抛出。 取代源异常,抛出一个别的异常。 Log异常,用于查看、排错等。 不做任何处理,只是将传播路径截断。虽然AOP是异常处理最佳方案,但技术上远未成熟,我们都还是用传统的方式来处理异常。对应这几种情况,我们一般都会这样来处理: <script type="text/javascript"><!--google_ad_client = "pub-4074314165604347";google_ad_width = 728;google_ad_height = 90;google_ad_format = "728x90_as";google_ad_type = "text_image";google_ad_channel = "";//--></script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>1) // 提示用户的处理方式,出错后提示用户 try { // 正常执行语句; } catch(Exception ex) { String formattedInfo = FormatException(ex); Logging.Log(formattedInfo); // 或Logger.Log(e); Throw new MyException("出错了。"); // 或者直接提示客户 //MessageBox.Show(errorMsg, "Application Error", MessageBoxButtons.OK, MessageBoxIcon.Stop); //lblError.Text = errorMsg; } 2) // logging,出错后作记录 catch(SomeException e) { string formattedInfo = FormatException(e); Logger.Log(e); throw e; } 3) //replace,抛出一个新异常,屏蔽掉敏感信息 catch(SomeException e) { CustomException myException = new CustomException(“XXXXXXXXXXXXXXXXXXXXXX”); throw myException; } 4) //wrapping 包封原来的异常,添加Context信息后,重新抛出 catch(SomeException e) { CustomException myException = new CustomException(e); throw myException; } 5) //propagating 记录后,继续传播之 catch(SomeException e) { // Exception handling code to be done before propagating string formattedInfo = FormatException(e); Logger.Log(e); throw e; } 一般来说,象上面这样的处理方式都非常不灵活,有极大的代码重复,当要求发生变化时,可能源代码要做大量的机械修改。异常处理应用程序块在充分满足上述异常处理要求的基础上,使我们在不同项目之间、同一个项目的不同开发人员之间建立起了统一的异常处理策略。当需求发生改变时,我们可以用配置工具进行修改配置文件,不用去修改源码,从而不用重新编译、发布程序。我们知道,在.Net里一个异常发生时,系统会抛出一个Exception类型或其子代的对象,习惯上我们要对这个对象进行一些处理,以排除错误或提示用户,常见的处理方式有提示用户、包装后重新抛出、用另一个异常对象取而代之、记录等。EHAB就是根据这样的要求而设计的,但她并不负责具体如何处理,而是做了大量基础工作,使对异常的处理非常简单,同时统一了处理策略,增加了灵活性。下面我们以常用的异常处理方式来说明异常处理应用程序块的用法,来看看使用EHAB是多么简单 2、用配置控制台配置异常处理应用程序块 ①添加异常处理应用程序块添加异常处理应用程序块后,就要添加一个或多个Exception Policy。一个异常处理应用程序块可以维护一个或多个Exception Policy,异常处理策略往往代表了对异常的处理方式,常见的策略有包封、取代、继续传播、处理并继续、记录等等,当然异常处理策略如何分类、有哪些异常处理策略,都是你自己说了算,只是取一个比较有意义的名字就行了。每种Exception Policy可以管理多种类型的异常,而每种类型的Exception又可以有多个Handler(异常处理器,在Exception类的继承层次结构中,可以针对每种类型的Exception设置一个Handler,这样一个子代Exception就可以有多个Handler)。 ②添加Exception Policy 添加几个Policy,适当修改Policy的名称,如Wrap Policy、Replace Policy、Log Policy、Propagate Policy、GlobalPolicy等。 ③给每个Policy添加几个Exception 当添加一个Exception类型时,我们不用自己键入,向导会提示我们选一个,这个异常类型可以是系统预定义的,也可以是来自某个程序集的,还可以是我们自己定义的。我们按自己的需要给每种Policy添加好Exception。然后针对每种类型的Exception设置处理活动PostHandlingAction。PostHandlingAction有三种分别是None、NotifyRethrow、ThrowNewException。 None表示此异常被内部处理掉了,调用者不用再处理了。 NotifyRethrow表示Application.ThreadException事件的处理器将重新抛出异常。 ThrowNewException表示这类异常你可以用一个新的异常类包封或取代之。 ④设置Exception的处理器handler 每个Exception一般都会设置一个或多个handler,当然也可以不设。Replace Handler要设置好其取代的异常类型,Wrap Handler也要置好其包封的异常类型,Log Handler要置好LogCategory。 ⑤设置完毕,保存。 3、写代码 String policy = “Wrap Policy”; Try { // 。。。。。。。 } catch (Exception ex) { if (ExceptionPolicy.HandleException(ex, policy)) throw; } 其他类型Policy的代码与此类似,但异常的PostHandlingAction设为NotifyRethrow时,我们要将定义一个异常处理handler,并挂接到Application.ThreadException事件上。我们可以看到,对异常的不同处理方式其代码是一致的,而不象开始时我们列出的代码,不同的处理方式代码是不同的。
原创粉丝点击