Объект связи 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

  1. Я не мог понять, почему сервис переходит в неисправное состояние.
  2. Должен ли я поймать это исключение и выполнить некоторые исправления (если рекомендуется)?
  3. Может ли привязка TCP помочь мне избежать / удалить это исключение?

1 ответ

Ваша проблема в том, что ваш код использует экземпляр служебного прокси (Service Reference, сгенерированный SvcUtil или созданный непосредственно из ChannelFactory) после вызова службы возникла ошибка. Как реализован WCF, вы не можете "повторно использовать" служебный прокси, если вызов с этим прокси вызвал ошибку.

Вы должны написать правильную логику обработки исключений в соответствии с указаниями, приведенными в этом хорошем посте, для конкретных требований WCF. Это необходимо сделать независимо от фактической привязки, которую вы настраиваете прокси для использования.

Другие вопросы по тегам