尝试使用队列时收到此错误:
发生意外错误:通信对象System.ServiceModel.ServiceHost不能用于通信,因为它处于Faulted状态。 在System.ServiceModel.Channels.CommunicationObject.Close(TimeSpan timeout)
如何克服它?
更新:回答我在最后发布的解决方案
答案 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服务。