服务故障状态下的WCF

Far*_*rax 7 wcf

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

Gra*_*ark 9

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

"通信对象System.ServiceModel.Channels.ServiceChannel不能用于通信,因为它处于Faulted状态."

如果您尝试Close()在故障客户端上调用该方法,您可能也会收到此错误,我不记得了.

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


Shi*_*iji 5

这听起来像是超时而不是处理失败的服务.

由于代码必须进行JIT编译,因此在早上运行需要更长的时间,也许数据库需要缓存数据和查询计划.

以下是让WCF客户端自行清理的一种方法http://nimtug.org/blogs/damien-mcgivern/archive/2009/05/26/wcf-communicationobjectfaultedexception-quot-cannot-be-used-for-通信因为-IT-是-内式故障状态-QUOT-messagesecurityexception-QUOT-AN-错误出现-时-验证安全换的消息-quot.aspx