System.ServiceModel.ServiceHost不能用于通信,因为它处于Faulted状态

时间:2013-08-14 11:25:04

标签: wcf msmq

尝试使用队列时收到此错误:

发生意外错误:通信对象System.ServiceModel.ServiceHost不能用于通信,因为它处于Faulted状态。        在System.ServiceModel.Channels.CommunicationObject.Close(TimeSpan timeout)

如何克服它?

更新:回答我在最后发布的解决方案

4 个答案:

答案 0 :(得分:7)

更新:就我而言,有帮助的是:

1)启用跟踪日志:http://msdn.microsoft.com/en-us/library/ms732023.aspx

2)在跟踪日志中写道:

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

答案就是这么说的。创建了一个事务性队列 - 一切正常:)希望它能帮助人们:)

答案 1 :(得分:6)

此问题是由访问权限引起的。启动具有管理权限的Visual Studio,问题将得到解决。 要使用管理员权限启动Visual Studio,请右键单击Visual Studio图标,然后选择"以管理员身份运行"。

答案 2 :(得分:2)

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

答案 3 :(得分:1)

根据我的经验,一旦端点处于故障状态,它将无法自行恢复并需要重新启动。没有办法从客户端实现这一点。主持人必须这样做。

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

  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

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