Объект связи System.ServiceModel.Channels.ServiceChannel нельзя использовать для связи, поскольку он находится в состоянии Failed
Объект связи System.ServiceModel.Channels.ServiceChannel нельзя использовать для связи, поскольку он находится в состоянии Failed.
Я получаю эту ошибку, когда приложение Windows пытается связаться с WCF, размещенным в качестве службы Windows, через wsDualHttpBinding. WCF используется для связи с устройством через последовательный порт. Приложение Windows используется для частой отправки команд через службу Windows WCF.
Вот трассировка стека:
трассировка стека: в System.ServiceModel.Channels.CommunicationObject.ThrowIfDisposedOrNotOpen() в System.ServiceModel.Channels.ServiceChannel.Call(строковое действие, логическая односторонняя операция, операция ProxyOperationRuntime, объектные [] входы, системные [ауты] времени выхода, временные интервалы.ServiceModel.Channels.ServiceChannelProxy.InvokeService(метод IMethodCallMessageCall, операция ProxyOperationRuntime) в System.ServiceModel.Channels.ServiceChannelProxy.Invoke(сообщение IMessage)
Исключение, переброшенное в [0]: в System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg) в System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData.ReferenceServiceServiceSource32) в типе Int32) ICommandService.SendToMultipleChannel(String[] channel, Int32[][] locid, String cmd, Int32 cmdData) в GridSplitter.CommandServiceReference.CommandServiceClient.SendToMultipleChannel(String[] канал, Int32 [см32] в строке [см32]) GridSplitter.MainWindow.bwChkAndSendRedeploy_DoWork(Отправитель объекта, DoWorkEventArgs e): 9.11.2012 11:05:58
- Я не мог понять, почему сервис переходит в неисправное состояние.
- Должен ли я поймать это исключение и выполнить некоторые исправления (если рекомендуется)?
- Может ли привязка TCP помочь мне избежать / удалить это исключение?
1 ответ
Ваша проблема в том, что ваш код использует экземпляр служебного прокси (Service Reference, сгенерированный SvcUtil или созданный непосредственно из ChannelFactory
) после вызова службы возникла ошибка. Как реализован WCF, вы не можете "повторно использовать" служебный прокси, если вызов с этим прокси вызвал ошибку.
Вы должны написать правильную логику обработки исключений в соответствии с указаниями, приведенными в этом хорошем посте, для конкретных требований WCF. Это необходимо сделать независимо от фактической привязки, которую вы настраиваете прокси для использования.