2

我想知道 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,这是否足够?我需要评论

4

2 回答 2

2

服务器端任何未捕获的异常未处理并转换为FaultExceptionFaultException<T>可能会导致您的频道出错。在 per-call 场景或单向场景中,您通常并不真正关心发生故障的通道,但在基于会话的场景中,您肯定会关心!

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

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

马克

于 2009-07-26T18:27:05.073 回答
0

WCF 代理对象可能会因为除了 faultException 之外的任何类型的异常而出错。所以基本上你最好的选择就是检查代理状态并且它是错误的创建一个新的。

要记住的另一件事是,故障与 WCF 会话有关。如果您不需要 WCF 会话,请确保将其关闭,这样您就避免了一系列可能出现的问题。

于 2009-07-26T14:34:33.000 回答