服务故障状态下的WCF

时间:2010-08-24 03:09:24

标签: wcf

我的项目中运行了很多web服务,但是很长一段时间以来都发生了奇怪的事情。我的服务偶尔会因为错误消息而失败“通信对象System.ServiceModel.Channels.ServiceChannel,由于它处于Faulted状态,因此不能用于通信。”这种情况通常发生在我早上第一次运行应用程序之后,它们不经常发生。关于可能导致此错误的原因的任何想法?

2 个答案:

答案 0 :(得分:9)

如果WCF服务抛出FaultException,则客户端的状态将更改为CommunicationState.Faulted。如果您然后尝试使用此客户端对象来调用另一个服务操作,您将收到错误

  

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

如果您尝试在出错的客户端上调用Close()方法,也可能会出现此错误,我不记得。

您可以通过查看State属性来检查客户端对象的状态。如果要正确关闭客户端(您应该这样做),如果客户端处于Abort()状态,则需要调用Faulted方法,如果是Close()状态,则需要调用{{1}}方法客户处于任何其他状态。

答案 1 :(得分:5)

这听起来像超时并未处理失败的服务。

早上运行需要更长的时间,因为代码必须是JIT编译的,也许数据库需要缓存数据和查询计划。

以下是让WCF客户端自行清理http://nimtug.org/blogs/damien-mcgivern/archive/2009/05/26/wcf-communicationobjectfaultedexception-quot-cannot-be-used-for-communication-because-it-is-in-the-faulted-state-quot-messagesecurityexception-quot-an-error-occurred-when-verifying-security-for-the-message-quot.aspx

的一种方法