Служба WCF зависает, и клиенты получают ServiceModel.CommunicationException - PullRequest
0 голосов
/ 07 августа 2009

Мое приложение имеет 50 конечных точек службы (например, /mysite/myService.svc). Он размещен в IIS. Периодически (один раз в два или три дня) служба перестает отвечать на запросы. Это никогда не тот сервис, который зависает. Пока служба зависла, некоторые другие службы работают нормально, а другие также зависают.

Все клиенты (с разных компьютеров) получают эту ошибку:

ServiceModel.CommunicationException 

Message: An error occurred while receiving the HTTP response to 
https://server/mysite/myservice1.svc.

This could be due to the service endpoint binding not using the HTTP 
protocol. This could also be due to an HTTP request context being
aborted by the server (possibly due to the service shutting down). 
See server logs for more details.

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

Мне нужно вручную перезапустить пул приложений, чтобы решить эту проблему.

Вы знаете, в чем может быть причина? Как я могу исследовать эту проблему? Я готов взять дамп памяти рабочего процесса, когда служба зависла, но я не знаю, что искать в дампе.

Обновление (13 августа 2009 г.): Я почти исключил идею, что на сервере закончились соединения (см. Комментарий в ответе Шираз Бхайджи). У меня может быть новое преимущество: я регистрирую все исключения на стороне сервера в файле журнала. Таким образом, теоретически, когда это происходит на клиенте, на сервере не возникает никаких исключений; в противном случае у меня было бы доказательство этого в моих журналах. Но что, если ошибка возникает на сервере, но происходит на низком уровне, где исключения не направляются в мой код обработки исключений? Я разместил этот вопрос о сценариях, где исключения низкого уровня не могут быть обработаны. Я буду информировать вас о ходе моего расследования.

Ответы [ 3 ]

1 голос
/ 07 августа 2009

Звучит так, как будто у вас закончились соединения.

По умолчанию время ожидания WCF и, следовательно, соединение остается открытым в течение 10 минут.

Когда вы перезапускаете пул приложений, все соединения закрываются, и поэтому все работает снова.

Чтобы исправить это, проверьте код, чтобы убедиться, что вы закрываете соединения / утилизируете прокси.

1 голос
/ 15 июня 2010

Чтобы решить эту проблему, мы устанавливаем для InstallSecurityContext значение False в привязке.

0 голосов
/ 07 августа 2009

Я не сталкивался с этой конкретной проблемой, но предложил бы включить трассировку / ведение журнала сообщений для службы WCF в конфигурации для службы и / или клиентского приложения (если у вас есть контроль над этим). Я сделал это в последние несколько дней для службы, которую мне нужно было устранить.

Ссылка MSDN здесь является хорошей отправной точкой.

Также см. Таблицу в этой публикации с различными уровнями детализации трассировки, которые вы можете настроить. Есть несколько уровней, которые могут переходить от регистрации исключений к полным деталям сообщения. Это довольно быстро настроить в файле app.config.

Чтобы проанализировать вывод файла журнала, используйте SvcTraceViewer.exe, который поставляется с Windows SDK, который, если он установлен, должен находиться в этой папке: C: \ Program Files \ Microsoft SDKs \ Windows \ v6.0 \ Bin

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