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

Fah*_*had 30 asp.net-core

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

Tse*_*eng 44

在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
    }
}
Run Code Online (Sandbox Code Playgroud)

IApplicationLifetime还暴露了取消标记ApplicationStoppedApplicationStarted以及一个StopApplication()方法来停止该应用程序.

  • 对于Windows10,IIS 10(Dev)我正在使用Start的东西,但是没有优雅的停止信号.这是使用Shift-F5终止调试或通过sys托盘应用程序在IIS10中停止进程的情况. (4认同)
  • 这应该适用于所有操作系统和服务器吗?我一直无法让它在 OSX + Kestrel 上运行。 (3认同)
  • 对于 .NET Core 3.0+,建议使用“IHostApplicationLifetime”,因为“IApplicationLifetime”将很快被弃用。其余部分仍将按照上面所写的方式与新服务一起工作 (2认同)

Ste*_*iks 25

除了原始答案,我在尝试连接构造函数中的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
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 当您从main手动配置webhost时,这不使用Startup类. (2认同)