我想知道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,这是否足够?我需要评论
答案 0 :(得分:2)
服务器端未处理并转换为FaultException
或FaultException<T>
的未捕获异常可能会导致您的频道出现故障。在每次通话场景或单向场景中,您通常并不关心通道出现故障,但在基于会话的场景中,您肯定会这样做!
您最好的选择是真正尝试捕获服务器端的所有异常,并且只是禁止它们(在服务器上记录它们并且不做任何事情),或者在FaultException
中将它们返回给客户端。方式。
为了做到这一点,您的服务实现还应该实现IErrorHandler接口,它允许您执行此操作 - 捕获所有异常并记录+抑制它们,或将它们转换为SOAP错误。
马克
答案 1 :(得分:0)
由于除了faultException之外的任何异常,WCF代理对象都可能出现故障。因此,基本上你最好的选择就是检查代理状态,并且故障是创建一个新状态。
要记住的另一件事是故障与WCF会话有关。如果您不需要WCF会话,请确保将其关闭,并且您已经阻止了一系列可能的问题。