Допустим, мой веб-сайт, размещенный на IIS8, работает и успешно обслуживает запросы. Теперь из Powershell с повышенными привилегиями я запускаю:
Stop-WebSite <MyWebSite>
До недавнего времени я предполагал, что IIS перестанет обслуживать новые запросы, завершит текущие, а затем корректно остановит веб-сайт. Однако я подозреваю, что это не всегда так: в моем приложении есть такой путь кода:
Log("Begin");
try
{
DoSomething(); // can take a few seconds
}
finally
{
Log("End");
}
Иногда в моем журнале появлялись записи «Начало» без совпадения «Конец». Все шансы Stop-WebSite насильно убивает хост-процесс?
При запуске этого простого теста:
int ms = 2000;
try
{
Log("1");
Thread.Sleep(ms);
Log("2");
Thread.Sleep(ms);
Log("3");
Thread.Sleep(ms);
Log("4");
Thread.Sleep(ms);
Log("5");
}
finally
{
Log("6");
}
и останавливая веб-сайт через секунду после вызова страницы, я всегда получаю все шесть записей журнала.
Итак, в целом ваше (и мое) исходное предположение верное, рабочий процесс завершается до закрытия сайта.
Разве невозможно, чтобы определенный запрос не завершился? Что, если он будет работать часами? что, если что-то пойдет не так и рабочий процесс зависнет?
Я бы поискал другие причины, по которым ваш 'Log ("End");' не работает.