我们得到了
“通信对象System.ServiceModel.Channels.ServiceChannel不能用于通信,因为它处于Faulted状态。”
关闭应用程序时的消息。谁能告诉我如何解决它?我们知道通信渠道试图关闭但由于服务不可用或处于故障状态而无法关闭。
我只能说,当服务不可用时,但垃圾收集器试图销毁该对象时,通信对象正在调用其服务关闭功能。我们得到例外。
答案 0 :(得分:12)
当您询问有关异常的问题时,您应该发布整个异常,包括所有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。
另请参阅“What is the best workaround for the WCF client using
block issue?”和“Indisposable WCF clients”。
答案 1 :(得分:0)
查看代理项目here。
我们有类似的问题,这种技术修复了它。它基本上涉及从一个类继承,如果它出错,它将自动重新创建通道。