Мое приложение имеет 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 о сценариях, где нельзя обрабатывать исключения на низком уровне. Я буду информировать вас о ходе моего расследования.
Клиенты закрывают соединение (мы управляем клиентским приложением), но тем не менее это хороший момент. Если клиентское приложение, например, аварийно завершает работу (или убивается), возможно, у него не будет возможности закрыть прокси.Но в таком случае сервер не выдаст ошибку, если достигнет максимального количества соединений? – Sylvain
Я попробую и опускаю getTimeout на сервере. Если я начну получать тайм-ауты, это укажет на проблему с тем, как клиент закрывает прокси-сервер. – Sylvain
Я опустил getTimeout. Это ничего не изменило. Я собираюсь исключить мысль о том, что у меня заканчиваются связи. Я провел тест в контролируемой среде: когда на сервере заканчиваются соединения, ошибки, которые получают клиенты, - это исключение TimoutException, а не исключение CommunicationException, например, то, что я получаю на производстве. Поэтому я думаю, что это что-то еще. – Sylvain