2012-11-14 63 views
4

的通信對象,System.ServiceModel.Channels.ServiceChannel, 不能用於通信,因爲它是在故障狀態。通信對象,System.ServiceModel.Channels.ServiceChannel,不能用於通信,因爲它是處於故障狀態

當Windows應用程序試圖通過wsDualHttpBinding與作爲Windows服務託管的WCF進行通信時,出現此錯誤。 WCF用於通過串行端口與設備進行通信。用於通過WCF Windows服務頻繁發送命令的Windows應用程序。

這裏的堆棧跟蹤:

堆棧跟蹤:在 System.ServiceModel.Channels.CommunicationObject.ThrowIfDisposedOrNotOpen() 在System.ServiceModel.Channels.ServiceChannel.Call(串動, 布爾單向, ProxyOperationRuntime操作中,在 System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage 包括methodCall,ProxyOperationRuntime操作)在 System.ServiceModel.Channels.ServiceChannelProxy.Invoke對象[]插件, 對象[]奏,時間跨度超時)(IMessa GE 消息)在

異常重新拋出[0]:在 System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(即時聊天 reqMsg,即時聊天retMsg)在 System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke( MessageData & MSGDATA,的Int32類型)在 GridSplitter.CommandServiceReference.ICommandService.SendToMultipleChannel(字符串[] 信道,的Int32 [] [] LOCID,字符串CMD,的Int32 cmdData)在 GridSplitter.CommandServiceReference.CommandServiceClient.SendToMultipleChannel(字符串[] channel,Int32 [] [] locid,String cmd,Int32 cmdData)在 GridSp litter.MainWindow.bwChkAndSendRedeploy_DoWork(對象發件人, DoWorkEventArgs E):2012年11月9日上午11時05分58秒

  1. 我不明白爲什麼該服務進入故障狀態。
  2. 我是否應該捕獲此異常並執行一些補丁工作(如果推薦)?
  3. TCP綁定可以幫助我避免/刪除此異常嗎?

回答

4

您的問題是您的代碼在服務調用發生故障後正在使用服務代理的實例(Service Reference,由SvcUtil生成或直接從ChannelFactory創建)。 WCF的實施方式,一旦與該代理的通話發生故障,您就不能「重複使用」服務代理。

您需要針對WCF的特定要求編寫適當的異常處理邏輯沿lines shown in this good post。無論您配置代理使用的實際綁定如何,都需要完成此操作。

+0

Hello Sixto,我按照您提供的鏈接建議實施,直到現在它工作,謝謝,非常感謝。 Manoj –

+1

好消息是,WCF有一些隱藏的錯綜複雜的東西,有點過於頻繁。很高興的代碼幫助,並希望你接受我的答案。謝謝! –

相關問題