我的项目中运行了很多web服务,但是很长一段时间以来都发生了奇怪的事情。我的服务偶尔会因为错误消息而失败“通信对象System.ServiceModel.Channels.ServiceChannel,由于它处于Faulted状态,因此不能用于通信。”这种情况通常发生在我早上第一次运行应用程序之后,它们不经常发生。关于可能导致此错误的原因的任何想法?
答案 0 :(得分:9)
如果WCF服务抛出FaultException
,则客户端的状态将更改为CommunicationState.Faulted
。如果您然后尝试使用此客户端对象来调用另一个服务操作,您将收到错误
“通讯对象, System.ServiceModel.Channels.ServiceChannel, 不能用于沟通 因为它处于Faulted状态。“
如果您尝试在出错的客户端上调用Close()
方法,也可能会出现此错误,我不记得。
您可以通过查看State
属性来检查客户端对象的状态。如果要正确关闭客户端(您应该这样做),如果客户端处于Abort()
状态,则需要调用Faulted
方法,如果是Close()
状态,则需要调用{{1}}方法客户处于任何其他状态。
答案 1 :(得分:5)
这听起来像超时并未处理失败的服务。
早上运行需要更长的时间,因为代码必须是JIT编译的,也许数据库需要缓存数据和查询计划。
的一种方法