如何防止通道异常使WCF服务停止工作?

Jad*_*ias 1 .net wcf timeout exception channel

我使用netNamedPipeBinding创建了一个WCF单例服务.发生通道异常时,会使通道处于故障状态,并且所有后续操作都会引发异常.我怎么能阻止这个?我希望TimeoutException或任何其他常见异常只使一个操作失败,而不是使服务无响应.

mar*_*c_s 8

您需要将服务器端的异常包装到FaultException中.如果您控制线路的两端,并且两端都是.NET,您只需将.NET异常包装成a FaultException<T>并将其发送回客户端即可.这样通道就可以使用了.

有关详细信息,请参阅在MSDN上的合同和服务中指定和处理故障,另外,请参阅CodeProject上的本文以及此博客文章为何 在同一主题上使用WCF FaultException.

另外,为了让您的生活更轻松,请查看IErrorHandler接口,您可以在服务器端实现全局捕获异常并将其转换为故障.还可以看到很多关于该主题的博客文章,即IErrorHandler:一个通用的故障转换器或许多其他(Bing或Google更多).

为了让您的生活更轻松,您可以将IErrorHandler实现为一种行为,您可以在服务中打开或关闭服务 - 在服务配置中,或通过在服务类上设置属性.互联网上有很多实现,我喜欢的是:有用的WCF行为:IErrorHandler.