4

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

当 Windows 应用程序尝试通过 wsDualHttpBinding 与作为 Windows 服务托管的 WCF 通信时,我收到此错误。WCF 用于通过串行端口与设备通信。Windows 应用程序过去常常通过 WCF windows 服务发送命令。

这是堆栈跟踪:

堆栈跟踪:在 System.ServiceModel.Channels.CommunicationObject.ThrowIfDisposedOrNotOpen() 在 System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs, TimeSpan timeout) 在 System .ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage methodCall, ProxyOperationRuntime operation) at System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessage message)

在 [0] 处重新引发异常:在 System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type) 处的 System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg) 处 GridSplitter.CommandServiceReference。 ICommandService.SendToMultipleChannel(String[] channel, Int32[][] locid, String cmd, Int32 cmdData) at GridSplitter.CommandServiceReference.CommandServiceClient.SendToMultipleChannel(String[] channel, Int32[][] locid, String cmd, Int32 cmdData) at GridSplitter.MainWindow.bwChkAndSendRedeploy_DoWork(对象发送者,DoWorkEventArgs e):2012 年 11 月 9 日上午 11:05:58

  1. 我不明白为什么服务会进入故障状态。
  2. 我是否应该捕获此异常并执行一些补丁工作(如果推荐)?
  3. TCP 绑定可以帮助我避免/删除此异常吗?
4

1 回答 1

4

您的问题是您的代码ChannelFactory在服务调用产生故障后使用服务代理的实例(服务参考,由 SvcUtil 生成或直接从创建)。WCF 的实现方式,一旦与该代理的调用引发错误,您就不能“重用”服务代理。

您需要按照这篇针对 WCF 特定要求的好帖子中显示的行编写适当的异常处理逻辑。无论您配置要使用的代理的实际绑定如何,都需要执行此操作。

于 2012-11-14T13:28:34.797 回答