Заставить приложение IIS приостановить / приостановить перезагрузку хост-машины на x секунд - PullRequest
0 голосов
/ 21 мая 2019

У меня есть балансировщик нагрузки HaProxy на некоторых веб-серверах IIS. Haproxy проверяет приложения iis по определенному пути, если они запущены или находятся в процессе обслуживания.

Я хотел бы найти решение, в котором я могу безопасно перезагрузить случайную машину IIS, а затем получить ее, чтобы запустить приложение iis для:

  1. Реагировать на перезагрузку и возвращать определенный код ответа (в данном случае 404) по определенному пути
  2. Остановите перезагрузку хост-машины на 15 секунд, чтобы убедиться, что все вызовы обработаны, и что haproxy увидел, что этот код состояния 404 сигнализирует о предстоящей перезагрузке сервера iis.

Можно ли каким-либо образом сделать эти две вещи?

Windows Server 2016, .Net 4.7.2

Это не будет работать, так как все вызовы IIS возвращают «Служба недоступна», когда IIS выполняет код Application_End:

protected void Application_End()
{
  var log = SystemLogManager.GetLogger(GetType());
  try
  {
    log.Warn("Ending application. Hanging for 15 seconds...");
    Thread.Sleep(TimeSpan.FromSeconds(15));
    log.Warn("Done end");
  }
  catch(Exception ex)
  {
    log.Error("Unexpected error in application end", ex);
  }
}

1 Ответ

2 голосов
/ 21 мая 2019

Вы можете написать сценарий powershell, который можно вызывать на любом сервере и:

  • Сделать веб-запрос на страницу проверки, которая устанавливает переменную кэша "logoffinprogress"
  • Проверкана странице проверьте переменную кэша и ответьте 404 http код ошибки
  • Сценарий powershell ждет 15 секунд, а затем перезагружает сервер
  • При перезапуске сервера iis работает, а контрольная страница отвечает http 200код

Я надеюсь, что это может помочь вам

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