Служба приложений Azure WebApp Изящное завершение работы / перезапуск - PullRequest
0 голосов
/ 15 ноября 2018

Я создал веб-приложение ASP.Net Core 2.1, в котором есть один HostedService для запуска фонового процесса. Процесс может занять до 20 секунд после отмены токена отмены.Все это прекрасно работает локально при запуске в IIS Express - метод StopAsync () вызывается, когда сайт IIS Express останавливается, и ожидает завершения процесса, прежде чем приложение будет завершено.

Когда я запускаю это приложение вСлужба приложений Azure не закрывает и не перезапускает корректно. Вызывается 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 для увеличения завершения работытайм-аут?

Большое спасибо.

1 Ответ

0 голосов
/ 16 ноября 2018

Если мы хотим изящно завершить работу веб-приложения, мы можем добавить IApplicationLifetime и использовать свойство ApplicationStopping в файле Startup.cs

IApplicationLifetime - это новый интерфейс в ASP.NET Core в пространстве имен Microsoft.AspNetCore.Hosting. Интерфейс разработан для того, чтобы дать разработчику возможность элегантно запустить, но в основном закрыть приложение.

Демонстрационный код

public void Configure(IApplicationBuilder app, IHostingEnvironment env,IApplicationLifetime applicationLifetime)
{ 
   ...
   applicationLifetime.ApplicationStopping.Register(OnShutdown);
   ...
}
private void OnShutdown()
{
   //todo
}
...