Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使IIS应用程序暂停/暂停主机重新启动x秒_C#_Reboot - Fatal编程技术网

C# 使IIS应用程序暂停/暂停主机重新启动x秒

C# 使IIS应用程序暂停/暂停主机重新启动x秒,c#,reboot,C#,Reboot,我在一些IIS Web服务器前面有一个HaProxy负载平衡器。Haproxy检查特定路径上的iis应用程序是否已启动或正在维护 我想提出一个解决方案,在这个方案中,我可以安全地重新启动一台随机的IIS计算机,然后通过此方法触发我的IIS应用程序: 对重新启动做出反应,并在特定路径上返回特定的响应代码(本例中为404) 暂停主机重新启动15秒,以确保所有呼叫都已处理,并且haproxy已看到此404状态代码,表示即将重新启动iis服务器 有没有可能做到这两件事 Windows Server 20

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

我想提出一个解决方案,在这个方案中,我可以安全地重新启动一台随机的IIS计算机,然后通过此方法触发我的IIS应用程序:

  • 对重新启动做出反应,并在特定路径上返回特定的响应代码(本例中为404)
  • 暂停主机重新启动15秒,以确保所有呼叫都已处理,并且haproxy已看到此404状态代码,表示即将重新启动iis服务器
  • 有没有可能做到这两件事

    Windows Server 2016,.Net 4.7.2

    这将不起作用,因为当IIS运行应用程序时,所有对IIS的调用都将返回“服务不可用”\u结束代码:

    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);
      }
    }
    

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

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

    我希望这可以帮助您

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