导致WCF代理出现故障的情况是什么?

时间:2009-07-26 14:22:11

标签: c# wcf fault-tolerance

我想知道WCF代理(由vs2008或svcutil生成)出现故障(故障状态)的情况是什么?所以我可以重新创建新实例并避免使用有问题的实例。

目前我正在处理TimeoutException,FaultException,CommunicationObjectAbortedException

            try
            {
                client.Method1(args);
            }
            catch (TimeoutException)
            {
                client.Abort();
                ReCreate();
            }
            catch (FaultException)
            {
                client.Abort();
                ReCreate();
            }
            catch (CommunicationObjectAbortedException)
            {
                client.Abort();
                ReCreate();
            }

我认为我可以避免所有这些类型并只处理父CommunicationException,这是否足够?我需要评论

2 个答案:

答案 0 :(得分:2)

服务器端未处理并转换为FaultExceptionFaultException<T>的未捕获异常可能会导致您的频道出现故障。在每次通话场景或单向场景中,您通常并不关心通道出现故障,但在基于会话的场景中,您肯定会这样做!

您最好的选择是真正尝试捕获服务器端的所有异常,并且只是禁止它们(在服务器上记录它们并且不做任何事情),或者在FaultException中将它们返回给客户端。方式。

为了做到这一点,您的服务实现还应该实现IErrorHandler接口,它允许您执行此操作 - 捕获所有异常并记录+抑制它们,或将它们转换为SOAP错误。

马克

答案 1 :(得分:0)

由于除了faultException之外的任何异常,WCF代理对象都可能出现故障。因此,基本上你最好的选择就是检查代理状态,并且故障是创建一个新状态。

要记住的另一件事是故障与WCF会话有关。如果您不需要WCF会话,请确保将其关闭,并且您已经阻止了一系列可能的问题。