System.ServiceModel.ServiceHost,不能用于通信,因为它处于故障状态
Posted
技术标签:
【中文标题】System.ServiceModel.ServiceHost,不能用于通信,因为它处于故障状态【英文标题】:System.ServiceModel.ServiceHost, cannot be used for communication because it is in the Faulted state 【发布时间】:2013-08-16 07:53:21 【问题描述】:尝试使用队列时收到此错误:
发生意外错误:通信对象 System.ServiceModel.ServiceHost 无法用于通信,因为它处于故障状态。 在 System.ServiceModel.Channels.CommunicationObject.Close(TimeSpan 超时)
如何克服?
更新:对我在最后发布的解决方案的回答
【问题讨论】:
有机会展示一些代码:) 我解决了,决定发布答案:) 之前在网上没有找到这个解决方案,所以决定分享:) 最好将您的解决方案发布为答案,然后将其标记为答案。这有助于让其他访问此页面的人更清楚。 【参考方案1】:此问题是由访问权限引起的。使用管理权限启动 Visual Studio,问题将得到解决。 要以管理员权限启动 Visual Studio,请右键单击 Visual Studio 图标并选择“以管理员身份运行”。
【讨论】:
【参考方案2】:更新:就我而言,有帮助的是:
1) 启用跟踪日志:http://msdn.microsoft.com/en-us/library/ms732023.aspx
2) 在跟踪日志中它写道:
绑定验证失败,因为绑定的 ExactlyOnce 属性设置为 true,而目标队列是非事务性的。服务主机打不开。通过将 ExactlyOnce 属性设置为 false 或为此绑定创建事务队列来解决此冲突。
答案说明了一切。创建了一个事务队列 - 一切正常 :) 希望它可以帮助人们:)
【讨论】:
【参考方案3】:关闭您的解决方案,现在按照以下步骤操作: 1.右键单击视觉工作室。 2. 单击以管理员身份运行。 3. 现在打开您的解决方案。 4.尝试运行它,您的问题将得到解决。
【讨论】:
【参考方案4】:根据我的经验,一旦端点处于故障状态,它将无法自行恢复,需要重新启动。没有办法从客户端实现这一点。主人必须这样做。
在主机端,您可以使用如下代码检查故障状态:
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 服务.
【讨论】:
【参考方案5】:对我来说,这是因为该端口已被另一个进程使用,我更改了端口并且服务照常工作。我通过跟踪日志知道这一点,只需按照此处的步骤操作:https://docs.microsoft.com/en-us/dotnet/framework/wcf/service-trace-viewer-tool-svctraceviewer-exe
回顾:
将此部分添加到 web.config 或 app.config 文件中:
<system.diagnostics>
<trace autoflush="true" />
<sources>
<source name="System.ServiceModel"
switchValue="Information, ActivityTracing"
propagateActivity="true">
<listeners>
<add name="sdt"
type="System.Diagnostics.XmlWriterTraceListener"
initializeData= "SdrConfigExample.e2e" />
</listeners>
</source>
</sources>
</system.diagnostics>
运行 WCF 服务以重现错误。
打开 SvcTraceViewer.exe 工具,我在以下位置找到它: C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin。它将打开 Microsoft 服务跟踪查看器窗口。
导航到名为“SdrConfigExample.e2e”的日志文件(文件>打开),该文件在上面的 XML 配置中指定,位于根目录中。这将更详细地列出错误,您可以找到异常的原因。
*提示:您可以使用everything tool 在您的计算机上轻松快速地查找文件。
【讨论】:
以上是关于System.ServiceModel.ServiceHost,不能用于通信,因为它处于故障状态的主要内容,如果未能解决你的问题,请参考以下文章