При обнаружении нарушения прав доступа w3wp.exe несколько раз падает и перезапускается, пока пул приложений не будет остановлен. - PullRequest
4 голосов
/ 08 февраля 2011

У меня есть служба CLR 4 WCF, размещенная в IIS 7.5 (Windows Server 2008 R2) с использованием привязки WebHttp (с [WebGet]). Служба вызывает в неуправляемый компонент, реализованный в C ++ (Visual Studio 2010).

Я намеренно добавил нарушение доступа внутри неуправляемого компонента (путем многократного вызова delete для указателя, вызова методов через удаленный указатель и т. Д.) Для проверки параметров генерации файла дампа. Нарушение доступа приводит к сбою процесса w3wp.exe, что неудивительно, если учесть «Исключения из-за поврежденного состояния» в CLR 4. Однако при перезапуске процесса (из-за параметров прогрева и всегда включенного в IIS) Похоже, что тот же запрос воспроизводится в службе, так что он снова завершает процесс w3wp.exe. Через несколько раз (определяется параметром пула приложений "max failures") пул приложений останавливается.

Я использую браузер в качестве тестового клиента, и пока выполняется последовательность перезапусков, запрос все еще находится в полете. Когда пул приложений остановлен, запрос возвращается с 503 Service Unavailable.

Я могу обойти эту проблему, поместив блок try...catch вокруг кода и используя атрибут [HandleProcessCorruptedStateExceptions]. Когда я это делаю, процесс w3wp.exe не падает. Однако это нежелательное поведение - я хочу, чтобы процесс завершился сбоем (нарушение доступа или повреждение памяти является достаточно серьезным), но я хочу, чтобы он перезапустился в чистом состоянии и не воспроизводил запрос.

Мне не удалось воспроизвести проблему с помощью привязки BasicHttp.

1 Ответ

0 голосов
/ 04 мая 2015

Так работает HTTP.sys (драйвер ядра, который обрабатывает http-запросы на нижнем уровне). Он ставит запросы в очередь и отправляет их в IIS после резервного копирования пула / сервера.

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