问题 WCF错误通信对象System.ServiceModel.Channels.ServiceChanne不能用于通信,因为它处于Faulted状态


我们明白了

“通信对象System.ServiceModel.Channels.ServiceChannel不能用于通信,因为它处于Faulted状态。”

关闭应用程序时的消息。谁能告诉我如何解决它?我们知道这是通信渠道试图关闭但由于服务不可用或处于故障状态而无法关闭。

我只能说,当服务不可用时,垃圾收集器试图销毁该对象时,通信对象正在调用其服务关闭功能。我们得到例外。


6365
2018-04-13 11:50


起源

不会回答因为我不能告诉你为什么它出了问题;但在尝试关闭之前,您始终可以检查其是否处于故障状态。 - Will


答案:


当您询问有关异常的问题时,您应该发布整个异常,包括所有InnerException实例。你应该捕获异常,显示ex.ToString(),然后用“throw”重新抛出异常:

try {
    // Do whatever causes the exception
} catch (Exception ex) {
    Console.WriteLine(ex.ToString());  // Or Debug.Print, or whatever
    throw; // So exception propagation will continue
}

在这种情况下,我想知道你是否有 运用 阻止您的代理实例化:

using (var proxy = new WcfProxyClient())
{
    // Use of proxy
}

WCF中存在一个设计缺陷,这使得它成为.NET中唯一不应该使用的地方 运用 块。相反,你需要手工完成。看到 http://web.archive.org/web/20100703123454/http://old.iserviceoriented.com/blog/post/Indisposable+-+WCF+Gotcha+1.aspx

另外,请参阅“什么是WCF客户端的最佳解决方法 using 阻止问题?“和”不可发生的WCF客户端”。


12
2018-04-13 12:03



仅供参考 - 链接已损坏。 - Alex R.
@AlexR:谢谢。通过Wayback Machine修复,并添加了两个链接。 - John Saunders


看看代理项目 这里

我们有类似的问题,这种技术修复了它。它基本上涉及从一个类继承,如果它出错,它将自动重新创建通道。


0
2018-04-13 11:57