ASP.NET Core中的Startup.cs中的Kestrel关闭功能

时间:2016-02-07 18:23:47

标签: asp.net-core

使用Microsoft.AspNet.Server.Kestrel时是否有关机功能? ASP.NET Core(以前的ASP.NET vNext)显然有一个启动序列,但没有提到关闭序列以及如何处理干净的闭包。

4 个答案:

答案 0 :(得分:38)

在ASP.NET Core中,您可以注册IApplicationLifetime

提供的取消令牌
public class Startup 
{
    public void Configure(IApplicationBuilder app, IApplicationLifetime applicationLifetime) 
    {
        applicationLifetime.ApplicationStopping.Register(OnShutdown);
    }

    private void OnShutdown()
    {
         // Do your cleanup here
    }
}

IApplicationLifetime还公开了ApplicationStoppedApplicationStarted的取消令牌以及停止申请的StopApplication()方法。

答案 1 :(得分:21)

除了原始答案之外,我在尝试连接构造函数中的IApplicationLifetime时遇到错误。

我通过以下方式解决了这个问题:

public class Startup 
{
    public void Configure(IApplicationBuilder app) 
    {
        var applicationLifetime = app.ApplicationServices.GetRequiredService<IApplicationLifetime>();
        applicationLifetime.ApplicationStopping.Register(OnShutdown);
    }

    private void OnShutdown()
    {
         // Do your cleanup here
    }
}

答案 2 :(得分:1)

该类现在已过时,请参考新界面 IHostApplicationLifetime 。更多信息here

答案 3 :(得分:1)

我通过应用程序生命周期回调事件解决了该问题

Startup.cs

public void Configure(IHostApplicationLifetime appLifetime) {
 appLifetime.ApplicationStarted.Register(() => {
  Console.WriteLine("Press Ctrl+C to shut down.");
 });

 appLifetime.ApplicationStopped.Register(() => {
  Console.WriteLine("Terminating application...");
  System.Diagnostics.Process.GetCurrentProcess().Kill();
 });
}

Program.cs

另外,在构建主机时使用UseConsoleLifetime()

Host.CreateDefaultBuilder(args).UseConsoleLifetime(opts => opts.SuppressStatusMessages = true);