WCF в Службе неисправного государства - PullRequest
7 голосов
/ 24 августа 2010

В моем проекте запущено много веб-сервисов, но в течение довольно долгого времени происходило что-то странное. Мои службы время от времени отказывают без причины с сообщением об ошибке «Объект связи, System.ServiceModel.Channels.ServiceChannel, не может использоваться для связи, потому что он находится в состоянии Faults». Обычно это происходит, когда я первым делом запускаю приложение утром, после чего они появляются реже. Любые идеи относительно того, что может быть причиной этой ошибки?

Ответы [ 2 ]

9 голосов
/ 26 августа 2010

Если служба WCF выдает FaultException, клиенту будет изменено его состояние на CommunicationState.Faulted. Если вы попытаетесь использовать этот клиентский объект для вызова другой операции службы, вы получите сообщение об ошибке

«Объект связи, System.ServiceModel.Channels.ServiceChannel, не может быть использован для общения потому что он находится в состоянии неисправности. "

Вы также можете получить эту ошибку, если попытаетесь вызвать метод Close() на неисправном клиенте, я не могу вспомнить.

Вы можете проверить состояние вашего клиентского объекта, проверив свойство State. Если вы хотите правильно закрыть свой клиент (что вам следует делать), вам нужно вызвать метод Abort(), если клиент находится в состоянии Faulted, и метод Close(), если клиент находится в любом другом состоянии. .

5 голосов
/ 24 августа 2010

Это звучит как тайм-аут в сочетании с не обработкой сбойных служб.

Утренний запуск выполняется дольше, так как код должен быть скомпилирован в JIT, возможно, базе данных также необходимо кэшировать данные и планы запросов.

Вот один из способов заставить клиента WCF убирать за собой http://nimtug.org/blogs/damien-mcgivern/archive/2009/05/26/wcf-communicationobjectfaultedexception-quot-cannot-be-used-for-communication-because-it-is-in-the-faulted-state-quot-messagesecurityexception-quot-an-error-occurred-when-verifying-security-for-the-message-quot.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...