代码改变世界

WCF 第十章 异常处理 系列文章

2011-07-10 08:44  DanielWise  阅读(2367)  评论(2编辑  收藏  举报

上一个系列主要描述如何知道你的WCF服务正在做什么以及出问题时候底层在做什么?我们不能保证WCF服务一直稳定运行,但我们可以保证在WCF出现异常时可以第一时间找到问题。本篇主要描述WCF中的异常处理方法,因为没有人敢保证复杂系统中没有任何异常,一个完整系统的异常处理系统也应该是非常强大的,WCF中的异常处理可以帮助我们在面对类似事情时更加从容一些。

[第1篇] 异常处理

软件开发中最残酷的现实是纵然非常小心地完成的系统也有崩溃和不曾预料的场景发生。一个好的开发人员要保证在创建阻止问题发生的软件和处理由软件导致错误的能力的一个平衡。基于服务的分布式系统没有异常。事实上,基于服务的分布式系统通过引入诸如服务可用性,网络条件和服务版本兼容能力等加剧了这个问题。

[第2篇] 通信异常细节

在之前的例子中,我们调用了一个向服务层引发一个未处理异常的服务,客户端接收到的最小信息在图片10.1显示。默认情况下,WCF 会向一个调用方转发这条消息,但不是这条异常消息的细节,这是为了阻止有关系统实现或者结构信息的明暗细节暴露出来。

[第3篇] 使用FaultException管理服务异常

第一个例子描述允许一个未处理异常从服务实现层抛出到服务宿主的影响。注意在图片10.1,返回给调用者的异常类型时FaultException.这是一个在WCF中使用的继承自Exception基类类型来与SOAP错误协议集成的类型。

[第4篇] 创建并使用强类型错误

正如我们刚才描述的,一个基本的FaultException不提供一个在客户端创建鲁棒性try/catch/finally错误处理逻辑的特殊类型方式。为了在客户端开启这种类型的处理方式,考虑使用通用型的FaultException<>类。

[第5篇] 实现客户端错误处理器

如果你已经使用FaultContract属性声明你的服务操作来定义与任何抛出的错误一起的数据契约,你的服务的WSDL描述将会包含在那些数据契约的细节中。这将允许你或者其他人创建对那些契约的细节和类型有完全访问权限的客户端处理单元。

[第6篇]总结

在这一章,我们介绍了WCF如何处理异常以及你需要影响那些操作的很多选项。首先可能也是最重要的是要理解当你什么也不做的时候会发生什么。默认情况下,未处理异常可能导致会话中断以及客户端代理非法。