使IIS应用程序停止/暂停主机重启x秒钟

时间:2019-05-21 18:57:37

标签: c# reboot

我在某些IIS Web服务器的前面有一个HaProxy负载平衡器。 Haproxy会在特定路径上检查iis应用程序是否已启动或正在维护。

我想提出一个解决方案,在这里我可以安全地重新启动随机的IIS计算机,然后使用它来触发我的iis应用程序:

  1. 对重启进行反应,并在特定路径上返回特定的响应代码(在这种情况下为404)
  2. 将主机重启至少15秒钟,以确保已处理所有呼叫,并且haproxy已看到此404状态代码表示即将重启iis服务器。

可以通过任何方式完成这两件事吗?

Windows Server 2016,.Net 4.7.2

这将不起作用,因为当IIS运行Application_End代码时,所有对IIS的调用都将返回“服务不可用”:

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 个答案:

答案 0 :(得分:2)

您可以编写可在任何服务器上调用的powershell脚本,并且:

  • 向检查页面提出Web请求,该页面设置了缓存变量“ logoffinprogress”
  • 检查页面检查缓存变量并以404 http错误代码响应
  • powershell脚本等待15秒钟,然后重新启动服务器
  • 服务器重新启动时iis正常工作,并且校验页以http 200代码响应

我希望这可以为您提供帮助