0

我发现了一种以编程方式重新启动 ASP.NET Core 应用程序的非常有趣的方法。

 public class Program
{
    private static CancellationTokenSource cancelTokenSource = new CancellationTokenSource();

    public static void Main(string[] args)
    {
        var host = new WebHostBuilder()
            .UseKestrel()
            .UseContentRoot(Directory.GetCurrentDirectory())
            .UseIISIntegration()
            .UseStartup<Startup>()
            .UseApplicationInsights()
            .Build();

        host.Run(cancelTokenSource.Token);
    }

    public static void Shutdown()
    {
        cancelTokenSource.Cancel();
    }
}

然后在控制器中:

 public class HomeController : Controller
{
    public IActionResult Index()
    {
        return View();
    }

    public IActionResult Restart()
    {
        Program.Shutdown();
        return RedirectToAction("Index", "Home", null);
    }      
}

它真的很好用。这实际上会关闭应用程序,但对应用程序的下一个请求将启动它。

现在,当我安装了多个实例(例如在 Azure 中)时,我将如何实现相同的目标?

4

1 回答 1

2

一种方法是从 Azure 获取所有实例的列表,并使用实例终结点 IP 地址而不是主机名对每个实例进行单独的 HTTP 调用。不幸的是,不知道如何在 Azure 中准确执行此操作,但在 Amazon Cloud 中我们使用AmazonEC2Client.DescribeInstances请求,应该有类似的东西。

另一种方法是使用消息队列。所以每个实例都应该订阅主题并在收到消息时重新启动。

于 2017-07-29T09:06:32.757 回答