Назад | Перейти на главную страницу

Завершит ли IIS ожидающие запросы на Stop-WebSite?

Допустим, мой веб-сайт, размещенный на 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");' не работает.