homestyle

 

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

默认情况下协议里面出现的异常都会导致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

posted on 2012-12-21 10:54  homestyle  阅读(799)  评论(0编辑  收藏  举报

导航