本文demo已上传至github:xinyuehtx/WCFdemo
这个博客会介绍如何设置服务的异常回馈
在之前的博客2019-1-29-wcf入门(9) - huangtengxiao和2019-1-30-wcf入门(10) - huangtengxiao中介绍了wpf提供的2种错误协定回馈异常的方式。
遗憾的是这2中方式都没有办法处理OneWay的情形。
这边博客介绍如何利用我们现有知识针对OneWay的情形回馈异常
回馈单向模式异常
为什么单向模式不能回馈异常
我们在2019-1-25-wcf入门(4) - huangtengxiao博客中说过,单向模式在调用服务端方法时会立刻返回。
那么当我们抛出异常时,服务端已经不知道该把异常信息回复给谁了。
所以对于单向模式,错误协定无法回馈错误信息。
如何回馈单向模式异常
还记得我们解决单向模式返回值问题的方案么?
没错就是2019-1-25-wcf入门(5) - huangtengxiao中提到的双工模式
说白了,就是添加一个传递异常信息的回调接口,在发生异常时向这个回调接口发送异常信息
我们在IFaultCallback
接口中添加了一个OnError
方法,传递2019-1-29-wcf入门(9) - huangtengxiao中错误协定定义的ServiceFault
类型,它包含了方法和异常信息。注意ServiceFault
需要能通过数据协定序列化
实现上catch所有异常,并将异常信息包装成ServiceFault
发送给客户端
最后我们在客户端输出异常信息
结果如图所示,我们成功获得服务端异常信息
存在问题
既然是利用双工协定,那么必然需要一些双工协定的必要支持,例如绑定,会话,实例化等选择
这个会在一些期望添加单向模式异常反馈的现有WCF方案造成一些限制
小结
我们研究了WCF服务的单向模式异常反馈,其特点有
- 利用双工在业务层实现
- 有双工模式的限制
- 能处理单向操作
参考链接:
本文会经常更新,请阅读原文: https://xinyuehtx.github.io/post/wcf%E5%85%A5%E9%97%A8-11.html ,以避免陈旧错误知识的误导,同时有更好的阅读体验。
本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。欢迎转载、使用、重新发布,但务必保留文章署名黄腾霄(包含链接: https://xinyuehtx.github.io ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请 与我联系 。