我们明白了
“通信对象System.ServiceModel.Channels.ServiceChannel不能用于通信,因为它处于Faulted状态。”
关闭应用程序时的消息。谁能告诉我如何解决它?我们知道这是通信渠道试图关闭但由于服务不可用或处于故障状态而无法关闭。
我只能说,当服务不可用时,垃圾收集器试图销毁该对象时,通信对象正在调用其服务关闭功能。我们得到例外。
我们明白了
“通信对象System.ServiceModel.Channels.ServiceChannel不能用于通信,因为它处于Faulted状态。”
关闭应用程序时的消息。谁能告诉我如何解决它?我们知道这是通信渠道试图关闭但由于服务不可用或处于故障状态而无法关闭。
我只能说,当服务不可用时,垃圾收集器试图销毁该对象时,通信对象正在调用其服务关闭功能。我们得到例外。
当您询问有关异常的问题时,您应该发布整个异常,包括所有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客户端”。
看看代理项目 这里。
我们有类似的问题,这种技术修复了它。它基本上涉及从一个类继承,如果它出错,它将自动重新创建通道。