2009-08-06 2 views
0

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

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

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 г.): Я почти исключил мысль о том, что на сервере заканчиваются соединения (см. Комментарий в ответе Шираз Бхайджи). У меня может быть новое преимущество: я регистрирую все исключения на стороне сервера в файле журнала. Поэтому теоретически, когда это происходит на клиенте, на сервере не возникает исключений; иначе у меня было бы доказательство этого в моих журналах. Но что делать, если ошибка возникает на сервере, но происходит на низком уровне, где исключения не перенаправляются на мой код обработки исключений? Я опубликовал this question о сценариях, где нельзя обрабатывать исключения на низком уровне. Я буду информировать вас о ходе моего расследования.

ответ

1

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

0

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

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

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

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

1

Похоже, что у вас заканчиваются соединения.

По умолчанию WCF имеет таймаут и поэтому держит соединение открытым в течение 10 минут.

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

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

+0

Клиенты закрывают соединение (мы управляем клиентским приложением), но тем не менее это хороший момент. Если клиентское приложение, например, аварийно завершает работу (или убивается), возможно, у него не будет возможности закрыть прокси.Но в таком случае сервер не выдаст ошибку, если достигнет максимального количества соединений? – Sylvain

+0

Я попробую и опускаю getTimeout на сервере. Если я начну получать тайм-ауты, это укажет на проблему с тем, как клиент закрывает прокси-сервер. – Sylvain

+0

Я опустил getTimeout. Это ничего не изменило. Я собираюсь исключить мысль о том, что у меня заканчиваются связи. Я провел тест в контролируемой среде: когда на сервере заканчиваются соединения, ошибки, которые получают клиенты, - это исключение TimoutException, а не исключение CommunicationException, например, то, что я получаю на производстве. Поэтому я думаю, что это что-то еще. – Sylvain

Смежные вопросы