System.ServiceModel.ServiceHost не может использоваться для связи, поскольку он находится в состоянии Faulted
Получение этой ошибки при попытке работать с очередью:
Непредвиденная ошибка: объект связи, System.ServiceModel.ServiceHost, не может использоваться для связи, поскольку он находится в состоянии Faulted. в System.ServiceModel.Channels.CommunicationObject.Close(тайм-аут TimeSpan)
Как его преодолеть?
Обновление: ответ на мое решение опубликовано в конце
Ответы
Ответ 1
Обновление: В моем случае, что помогло:
1) включение журналов трассировки: http://msdn.microsoft.com/en-us/library/ms732023.aspx
2) в журнале трассировки он написал это:
Проверка привязки завершилась неудачно, поскольку для свойства привязки ExactlyOnce установлено значение true, а очередь назначения не является транзакционной. Хост службы не может быть открыт. Разрешите этот конфликт, установив для свойства ExactlyOnce значение false или создав транзакционную очередь для этой привязки.
В ответ говорится все. Создал транзакционную очередь - все работает:) надеюсь, что это поможет людям:)
Ответ 2
Эта проблема связана с правами доступа. Запустите Visual Studio с правами администратора, и проблема будет решена.
Чтобы запустить Visual Studio с правами администратора, щелкните правой кнопкой мыши значок Visual Studio и выберите "Запуск от имени администратора".
Ответ 3
По моему опыту, когда конечная точка находится в неисправном состоянии, она не восстановится сама по себе и должна быть перезапущена. Нет способа сделать это с клиентской стороны. Хозяин должен это сделать.
На стороне хоста вы можете проверить состояние с ошибкой, используя следующий код:
While True
'broken connection case
If objServiceHost(ii).State <> CommunicationState.Opened Then
Throw New Exception("SynchronizationWS Service Host failed.")
Exit While
End If
Next
Threading.Thread.Sleep(c_SleepTime) 'sleep 1 second before going trying next
End While
У нас есть программа более высокого уровня, которая отслеживает сердцебиение нашего веб-сервиса (которое работает в службе Windows), и если программа более высокого уровня обнаруживает, что сердцебиение остановлено, оно будет перерабатывать службу Windows, перезагружая веб-службу WCF,