Wcf System.ServiceModel.ServiceHost无法用于通信,因为它处于故障状态

Wcf System.ServiceModel.ServiceHost无法用于通信,因为它处于故障状态,wcf,msmq,Wcf,Msmq,尝试处理队列时收到此错误: 发生意外错误:通信对象System.ServiceModel.ServiceHost无法用于通信,因为它处于故障状态。 在System.ServiceModel.Channels.CommunicationObject.Close处(TimeSpan超时) 如何克服它 更新:对我在末尾发布的解决方案的回答根据我的经验,一旦端点处于故障状态,它将无法自行恢复,需要重新启动。从客户端无法实现这一点。主人必须这样做 在主机端,可以使用以下代码检查故障状态: While

尝试处理队列时收到此错误:

发生意外错误:通信对象System.ServiceModel.ServiceHost无法用于通信,因为它处于故障状态。 在System.ServiceModel.Channels.CommunicationObject.Close处(TimeSpan超时)

如何克服它


更新:对我在末尾发布的解决方案的回答根据我的经验,一旦端点处于故障状态,它将无法自行恢复,需要重新启动。从客户端无法实现这一点。主人必须这样做

在主机端,可以使用以下代码检查故障状态:

  While True
      'broken connection case
      If objServiceHost(ii).State <> CommunicationState.Opened Then
        Throw New Exception("SynchronizationWS Service Host failed.") 
        Exit While
      End If
    Next
    Threading.Thread.Sleep(c_SleepTime) 'sleep 1 second before going trying next
  End While
为True时
“断开的连接情况
如果objServiceHost(ii).State CommunicationState.Opened,则
抛出新异常(“SynchronizationWS服务主机失败”)
退出时
如果结束
下一个
Threading.Thread.Sleep(c_SleepTime)'在尝试下一步之前先睡眠1秒钟
结束时

我们有一个更高级别的程序来监视web服务(在windows服务中运行)的心跳,如果更高级别的程序发现心跳停止,它将回收windows服务,重新启动WCF web服务

更新:在我的案例中,有帮助的是:

1) 启用跟踪日志:

2) 在跟踪日志中,它写道:

绑定验证失败,因为当目标队列为非事务性队列时,绑定的ExactlyOnce属性设置为true。无法打开服务主机。通过将ExactlyOnce属性设置为false或为此绑定创建事务队列来解决此冲突


答案说明了一切。创建了事务性队列-一切正常:)希望它能帮助人们:)

此问题是由于访问权限造成的。使用管理权限启动Visual Studio,问题将得到解决。
要使用管理员权限启动Visual Studio,请右键单击Visual Studio图标并选择“以管理员身份运行”。

关闭您的解决方案,现在按照以下步骤操作: 1.右键单击VisualStudio。 2.单击“以管理员身份运行”。 3.现在打开您的解决方案。
4.尝试运行它,您的问题将得到解决。

有没有可能显示一些代码:)我已解决,并决定发布答案:)以前在网上没有找到此解决方案,因此决定共享:)最好将您的解决方案发布为答案,然后将其标记为答案。这有助于其他人了解本页面。