您的位置:首页 > 其它

[WCF Step by Step 读书笔记] Chapter03 构造更强健的应用和服务

2011-02-28 23:18 351 查看
一、为什么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方法上添加相应的处理事件。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: