我有很多webservices在我的项目中运行,但奇怪的事情已经发生了很长一段时间了。我的服务偶尔会无故失败,并显示错误消息“通信对象System.ServiceModel.Channels.ServiceChannel不能用于通信,因为它处于Faulted状态。”这通常发生在我早上运行应用程序的第一件事情之后,它们发生的频率较低。任何有关可能导致此错误的想法?WCF服务出现故障状态
回答
这听起来像是一个超时结合不处理失败的服务。
由于代码必须进行JIT编译,可能还需要数据库缓存数据和查询计划,因此需要较长时间才能在早上运行。
但我没有使用“使用“块。 – Farax 2010-08-25 02:47:47
使用后仍需关闭服务,如果服务处于故障状态,则需要中止服务 – 2010-08-25 07:05:02
事实上,在移除我的USING块后,我可以看到真正的错误。 10x – 2013-06-12 12:07:59
清理如果WCF服务抛出一个FaultException
的一种方式,客户端将有其状态改为CommunicationState.Faulted
。如果您然后尝试使用该客户端对象调用其他服务操作,你会得到错误
“的通信对象, System.ServiceModel.Channels.ServiceChannel, 不能用于通信 因为它处于故障状态。“
你也可以,如果你尝试调用Close()
方法的故障客户端上得到这个错误,我不记得了。
您可以通过检查State
属性来检查客户端对象的状态。如果您想要正确关闭客户端(您应该这样做),则如果客户端处于Faulted
状态,则需要调用Abort()
方法;如果客户端处于任何其他状态,则需要调用Close()
方法。
这种击败'使用'的目的,不是吗? WCF永远不会让我惊讶它设计得有多糟糕。 – 2015-01-19 12:27:47
你尝试过WCF跟踪吗? – 2010-08-24 07:41:45
此错误来自使用WCF服务的代码,还是来自服务本身? – 2010-08-24 08:35:08
@拉迪斯拉夫:不,还没有。我不太确定WCF追踪。 Ne好教程让我starteD? @Graham:这基本上来自使用WCF服务的代码 – Farax 2010-08-25 02:43:11