Коммуникационный объект System.ServiceModel.Channels.ServiceChannel не может использоваться для коммуникации, потому что он находится в состоянии сбоя.

Коммуникационный объект System.ServiceModel.Channels.ServiceChannel не может использоваться для коммуникации, поскольку он находится в состоянии сбоя.

Я получаю эту ошибку, когда приложение Windows пытается связаться с WCF, размещенным как служба Windows, через wsDualHttpBinding. WCF используется для связи с устройством через последовательный порт. Приложение Windows, используемое для частой отправки команды через службу Windows WCF.

Вот трассировка стека:

трассировка стека: в System.ServiceModel.Channels.CommunicationObject.ThrowIfDisposedOrNotOpen () в System.ServiceModel.Channels.ServiceChannel.Call (действие строки, одноразовое логическое значение, операция ProxyOperation .ServiceModel.Channels.ServiceChannelProxy.InvokeService (IMethodCallMessage methodCall, операция 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, тип Int32, тип Int32) ICommandService.SendToMultipleChannel (канал [] String, Int32 [] [] locid, String cmd, Int32 cmdData) в GridSplitter.CommandServiceReference.CommandServiceClient.SendToMultipleChannel (String [] канал, Int32 [] [] locid32, cmd32, cmd GridSplitter.MainWindow.bwChkAndSendRedeploy_DoWork (отправитель объекта, DoWorkEventArgs e): 09.11.2012, 11:05:58

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

person Manoj Shukla    schedule 14.11.2012    source источник


Ответы (1)


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

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

person Sixto Saez    schedule 14.11.2012
comment
Привет, Sixto, я реализовал, как было предложено по ссылке, которую вы предоставили, до сих пор он работает, спасибо, большое спасибо. Манодж - person Manoj Shukla; 19.11.2012
comment
Отличные новости: в WCF есть несколько скрытых тонкостей, которые всплывают слишком часто. Рад, что код помог, и надеюсь, что вы примете мой ответ. Спасибо! - person Sixto Saez; 19.11.2012