![](https://ucc.alicdn.com/notfound.png?x-oss-process=image/resize,w_1400/format,webp)
通过本练习将学会使用异常处理应用程序块的包装策略,来处理一些带有敏感信息的异常。
第一步
打开Puzzler2.sln 项目,默认的安装路径应该为C:\Program Files\Microsoft Enterprise Library January 2006\labs\cs\Exception Handling\exercises\ex02,并编译。
第二步 保护服务中'Add Word'函数的代码访问安全
1
.在解决方案管理器选择项目PuzzlerService中的Dictionary.cs文件,选择View | Code菜单命令,为方法Add Word加上代码访问安全特性。
![](https://ucc.alicdn.com/qkixv43wa7m4w/developer-article410789/20241018/849aae0ee51248059a523cae3b0a3478.gif)
![](https://ucc.alicdn.com/qkixv43wa7m4w/developer-article410789/20241018/849aae0ee51248059a523cae3b0a3478.gif)
![](https://ucc.alicdn.com/qkixv43wa7m4w/developer-article410789/20241018/849aae0ee51248059a523cae3b0a3478.gif)
![](https://ucc.alicdn.com/qkixv43wa7m4w/developer-article410789/20241018/849aae0ee51248059a523cae3b0a3478.gif)
![](https://ucc.alicdn.com/qkixv43wa7m4w/developer-article410789/20241018/849aae0ee51248059a523cae3b0a3478.gif)
![](https://ucc.alicdn.com/qkixv43wa7m4w/developer-article410789/20241018/849aae0ee51248059a523cae3b0a3478.gif)
![](https://ucc.alicdn.com/qkixv43wa7m4w/developer-article410789/20241018/84c7512d12ac4508afafad248b5f43cb.gif)
![](https://ucc.alicdn.com/qkixv43wa7m4w/developer-article410789/20241018/9ae6bc6213f544ff8b37c05bbff621c3.gif)
![](https://ucc.alicdn.com/qkixv43wa7m4w/developer-article410789/20241018/9ae6bc6213f544ff8b37c05bbff621c3.gif)
![](https://ucc.alicdn.com/qkixv43wa7m4w/developer-article410789/20241018/9ae6bc6213f544ff8b37c05bbff621c3.gif)
![](https://ucc.alicdn.com/qkixv43wa7m4w/developer-article410789/20241018/2cf20f973b9643efadf81b04492bfea3.gif)
![](https://ucc.alicdn.com/qkixv43wa7m4w/developer-article410789/20241018/9ae6bc6213f544ff8b37c05bbff621c3.gif)
![](https://ucc.alicdn.com/qkixv43wa7m4w/developer-article410789/20241018/9ae6bc6213f544ff8b37c05bbff621c3.gif)
![](https://ucc.alicdn.com/qkixv43wa7m4w/developer-article410789/20241018/9ae6bc6213f544ff8b37c05bbff621c3.gif)
![](https://ucc.alicdn.com/qkixv43wa7m4w/developer-article410789/20241018/9ae6bc6213f544ff8b37c05bbff621c3.gif)
![](https://ucc.alicdn.com/qkixv43wa7m4w/developer-article410789/20241018/9ae6bc6213f544ff8b37c05bbff621c3.gif)
![](https://ucc.alicdn.com/qkixv43wa7m4w/developer-article410789/20241018/9ae6bc6213f544ff8b37c05bbff621c3.gif)
![](https://ucc.alicdn.com/qkixv43wa7m4w/developer-article410789/20241018/9ae6bc6213f544ff8b37c05bbff621c3.gif)
![](https://ucc.alicdn.com/qkixv43wa7m4w/developer-article410789/20241018/97fc488247aa436484ee26d024a38429.gif)
![](https://ucc.alicdn.com/qkixv43wa7m4w/developer-article410789/20241018/9ae6bc6213f544ff8b37c05bbff621c3.gif)
![](https://ucc.alicdn.com/qkixv43wa7m4w/developer-article410789/20241018/9ae6bc6213f544ff8b37c05bbff621c3.gif)
![](https://ucc.alicdn.com/qkixv43wa7m4w/developer-article410789/20241018/9ae6bc6213f544ff8b37c05bbff621c3.gif)
![](https://ucc.alicdn.com/qkixv43wa7m4w/developer-article410789/20241018/2cf20f973b9643efadf81b04492bfea3.gif)
![](https://ucc.alicdn.com/qkixv43wa7m4w/developer-article410789/20241018/9ae6bc6213f544ff8b37c05bbff621c3.gif)
![](https://ucc.alicdn.com/qkixv43wa7m4w/developer-article410789/20241018/9ae6bc6213f544ff8b37c05bbff621c3.gif)
![](https://ucc.alicdn.com/qkixv43wa7m4w/developer-article410789/20241018/9ae6bc6213f544ff8b37c05bbff621c3.gif)
![](https://ucc.alicdn.com/qkixv43wa7m4w/developer-article410789/20241018/97fc488247aa436484ee26d024a38429.gif)
![](https://ucc.alicdn.com/qkixv43wa7m4w/developer-article410789/20241018/9ae6bc6213f544ff8b37c05bbff621c3.gif)
![](https://ucc.alicdn.com/qkixv43wa7m4w/developer-article410789/20241018/9ae6bc6213f544ff8b37c05bbff621c3.gif)
![](https://ucc.alicdn.com/qkixv43wa7m4w/developer-article410789/20241018/9ae6bc6213f544ff8b37c05bbff621c3.gif)
![](https://ucc.alicdn.com/qkixv43wa7m4w/developer-article410789/20241018/4b9ed590690c4e9b93f101bc886b2c45.gif)
现在该方法只可以被角色
Grand PoohBah所执行。注意要修改的方法在
Dictionary.cs中而不是
DictionaryService.cs。
2
.选择Debug | Start Without Debugging菜单命令运行应用程序。在Word to check文本框中输入数字并单击Add Word按钮。这将会引发服务的AddWord方法抛出一个SecurityException异常信息,在事件查看器中可以看到。
![](https://ucc.alicdn.com/notfound.png?x-oss-process=image/resize,w_1400/format,webp)
3
.关闭应用程序。
第三步 配置应用程序包装SecurityExceptions
1
.在解决方案管理器中选中App.config文件,在View菜单或者在右键菜单中选择Open With…,将打开OpenWith对话框,选中Enterprise Library Configuration并单击OK按钮。
App.config
已经包含了一个空的策略Service Policy,默认的,如果一个策略是空的,异常信息将会从Catch块中重新抛出,事实上该策略并没有做任何事情。
2
.选中Service Policy节点,选择Action | New | Exception Type菜单命令。在弹出的对话框中选择System.Security.SecurityException,并单击OK按钮。
![](https://ucc.alicdn.com/notfound.png?x-oss-process=image/resize,w_1400/format,webp)
PostHandlingAction = ThrowNewException
![](https://ucc.alicdn.com/notfound.png?x-oss-process=image/resize,w_1400/format,webp)
FormatterType = TextExceptionFormatter,
LogCategory = General
Title = Security Exception in Service Layer
![](https://ucc.alicdn.com/notfound.png?x-oss-process=image/resize,w_1400/format,webp)
ExceptionMessage = Unauthorized Access
ReplaceExceptionType = System.Security.SecurityException (from mscorlib)
第四步 发生安全异常时退出应用程序
1
.选中UI Policy节点,选择Action | New | Exception Type菜单命令,选择System.Security.SecurityException类型并单击OK按钮,设置如下属性。
PostHandlingAction = NotifyRethrow
![](https://ucc.alicdn.com/notfound.png?x-oss-process=image/resize,w_1400/format,webp)
2
.为SecurityException在UI Policy策略下面添加新的Logging Handler,选择Action | New | Logging Handler菜单命令,设置如下属性。
FormatterType = TextExceptionFormatter,
LogCategory = General
Title = Security Exception in UI Layer
![](https://ucc.alicdn.com/notfound.png?x-oss-process=image/resize,w_1400/format,webp)
第五步 测试包装处理
选择Debug | Start Without Debugging运行应用程序,在Word to check文本框中输入数字并单击Add Word按钮。如果单击Continue将会出现“Unhandled exception”异常信息,这时不会再出现安全异常信息,可以打开事件查看器查看相关的日志记录情况。
在这里事件日志将会记录三次异常,第一次是由服务层引发的Service Policy所记录的异常,这是记录在服务端的;第二次是Application ThreadException引发的UI Policy所记录的异常,它是记录在客户端,由于这里服务端和客户端使用的是同一个机器;第三次是AppDomain UnhandledException引发的Unhandled Policy记录的异常。
注意根据Hands On Lab给出的时间建议,做完以上两个练习的时间应该为30分钟。
更多Enterprise Library的文章请参考《Enterprise Library系列文章》
本文转自lihuijun51CTO博客,原文链接:
http://blog.51cto.com/terrylee/67639
,如需转载请自行联系原作者