我创建了一个ASP.Net Core 2.1 WebApp,它具有一个HostedService来运行后台进程,一旦取消了令牌,该进程最多可能需要20秒钟才能完成。在IIS Express上运行时,所有这些在本地都可以正常工作-IIS Express站点停止时调用StopAsync()方法,并等待该过程完成,然后终止应用程序。
当我在Azure App Service中运行此应用程序时,它不会关闭或正常重启,但会调用StopAsync(),但该应用程序会在几秒钟内被杀死,不允许该应用程序正常关闭。
我尝试在web.config中添加以下内容:
<aspNetCore shutdownTimeLimit="90" processPath="%LAUNCHER_PATH%" arguments="%LAUNCHER_ARGS%" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout">
以及Program.cs中的以下内容,但这无效:
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>()
.UseShutdownTimeout(TimeSpan.FromSeconds(90));
我是否需要在Azure应用服务中设置其他设置以增加关机超时时间?
非常感谢。
答案 0 :(得分:1)
如果我们要正常关闭Web应用程序,可以在Startup.cs中注入IApplicationLifetime并使用属性ApplicationStopping
IApplicationLifetime是ASP.NET Core中Microsoft.AspNetCore.Hosting命名空间下的新接口。该界面旨在使开发人员有机会正常启动但大多数情况下关闭应用程序。
演示代码
public void Configure(IApplicationBuilder app, IHostingEnvironment env,IApplicationLifetime applicationLifetime)
{
...
applicationLifetime.ApplicationStopping.Register(OnShutdown);
...
}
private void OnShutdown()
{
//todo
}