[WCF Step by Step 读书笔记] Chapter03 构造更强健的应用和服务
一、为什么WCF运行时可以把普通的运行时错误转换成SOAP的错误信息从而通过WCF服务将异常信息发出?
1. 因为WCF设计了成为FaultException的异常类,使得Service在设计时可以抛出FaultException的对象而不是直接是Exception对象。书中提供的示例表明WCF的exception的处理与普通的.NET程序处理exception不同。普通的.net程序的话是在程序的try block里面throw exception,然后在catch里面处理exception。但是在WCF里,是在catch里面讲捕获到的exception转换成FaultException对象然后抛出。然后在Client端再次在catch块里处理exception。
二、如何使用FaultConract属性来定义一个强类型的SOAP缺陷?
1. 首先使用DataContract这个Attribute来定义要实现的强类型的错误类型:
2. 然后在使用ServiceContract的接口上,使用FaultContract对要使用强类型错误类型的方法进行标注:
3. 这样当Catch里面要抛出这个Exception的时候就可以使用强类型的错误类型了。
三、如何在client端捕获和处理SOAP缺陷?
按顺序Catch不同类型的Exception就可以了。
四、如何配置WCF服务才可以把未定义的Exception发送到client?
可以有两种方法,一种是在app.config里面添加一个ServiceDebug结点:
另外一种是在对Service进行实现的时候使用attribute进行实现:
五、如何判断WCF的托管程序的运行状态?以及如何从Faulted状态恢复?
可以通过ServiceHost对象的State属性来判断WCF托管程序的状态。而对于Faulted状态的处理,则是在Faulted这个委托链上添加相应的处理方法来实现的。具体来说,是在Faulted添加一个判定ServiceHost妆台的方法。如果ServiceHost对象的状态的确处于Faulted,那么可以先执行Abort()方法,然后从新为其实例化一个对象。
六、如何检测和记录发送给service的不能识别的消息呢?
一个很简单的方法就是在SericeHost里面添加UnknownMessgeReceived方法上添加相应的处理事件。








浙公网安备 33010602011771号