【问题标题】:Make IIS Application stall/pause host machine reboot for x seconds使 IIS 应用程序停止/暂停主机重新启动 x 秒
【发布时间】:2019-05-21 18:57:37
【问题描述】:

我在一些 IIS 网络服务器前面有一个 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);
  }
}

【问题讨论】:

  • 如果系统试图暂时停止它很可能以 IIS 刚刚被内核终止。
  • @Stefan Well haproxy 有一个明确的特性,将 404 解释为“停机维护”。如果我只是让 IIS 在重新启动时返回 503,那么 haproxy 可能仍然会在它意识到服务器永久关闭之前将流量发送到站点(直到重新启动完成)。我使用了与 bdn02 接受的答案相同的 powershell

标签: c# reboot


【解决方案1】:

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

  • 向设置缓存变量“logoffinprogress”的检查页面发出网络请求
  • 检查页面检查缓存变量并返回 404 http 错误代码
  • powershell 脚本等待 15 秒,然后重新启动服务器
  • 在服务器重新启动时,iis 正在工作,并且检查页面以 http 200 代码响应

希望对你有帮助

【讨论】:

  • 我最终做到了 :)
猜你喜欢
  • 2018-09-15
  • 1970-01-01
  • 1970-01-01
  • 2015-09-08
  • 2015-08-29
  • 2010-09-28
  • 2016-03-22
  • 2015-08-31
  • 1970-01-01
相关资源
最近更新 更多