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

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

我得到这个错误,当Windows应用程序试图通过wsDualHttpBinding作为Windows服务托pipe的WCF通信。 WCF用于通过串口与设备进行通信。 用于通过WCF Windows服务频繁发送命令的Windows应用程序。

这是堆栈跟踪:

堆栈跟踪:在System.ServiceModel.Channels.CommunicationObject.ThrowIfDisposedOrNotOpen()在System.ServiceModel.Channels.ServiceChannel.Call(string操作,布尔单向,ProxyOperationRuntime操作,对象[] ins,对象[]出,TimeSpan超时) .ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage methodCall,ProxyOperationRuntime操作)在System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessage消息)

exceptionrethrown在System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg,IMessage retMsg)在System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData&msgData,Int32types)在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(Object sender,DoWorkEventArgs e):11/9/2012 11:05:58 AM

  1. 我不明白为什么服务将进入故障状态。
  2. 我应该赶上这个例外,并执行一些补丁工作(如果推荐)?
  3. TCP绑定可以帮助我避免/删除这个exception?

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

你需要编写适当的异常处理逻辑,在WCF特定需求的这个好帖子中显示 。 无论您配置代理使用的实际绑定如何,都需要完成此操作。