WCF异常处理注意事项:信道异常导致Channel.Faulted事件的处理办法

本文探讨了WCF通信中遇到的问题,特别是在默认情况下因界面异常而导致的通信故障问题。提出了两种解决方案:一是通过异步调用来隔离异常;二是使用自定义FaultException来维持通信状态。

默认情况下协议里面出现的异常都会导致WCF通信转为Faulted状态,并且引发OperationContext.Current.Channel.Faulted事件,这种设定让我纠结了一段时间,主要原因有:

(1)在协议里,我可能将收到的数据传给某个界面,但因为界面引发的异常,也会导致WCF通信转为Faulted状态

(2)WCF通信转为Faulted状态就不再允许通信了,意味着客户端需要重新连接服务器,伤不起

最后,解决办法有两个:

(1)在协议里,接收到数据后,用异步执行其他的操作,比如BeginInvoke执行界面的数据刷新,这样界面刷新引发的异常将不会引发Channel.Faulted事件,异常停留在客户端

(2)自定义FaultException,当出现异常时,向信道抛出这个自定义异常,那么WCF信道不会转为Faulted状态,可以继续通信,参照http://www.dotblogs.com.tw/kirkchen/archive/2010/05/31/15517.aspx#48879

转载于:https://www.cnblogs.com/meiwlongblog/archive/2012/12/21/2827588.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值