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,