.NET Core Worker в ASP.Net
Если нам надо, чтобы какая-нибудь программа работала сама по себе длительное время или постоянно и, например, раз в минуту или час совершала какие-либо действия, вы можете использовать .NET Core Worker.
.NET Core Worker Service вместо Windows Service
Что такое .NET Core Worker? В .NET Core 3.0 появился новый тип проекта Worker Service. Этот шаблон тесно интегрирован с Windows -службами или Cron в Linux. Своего рода проект, заточенный для создания Windows Service или daemon в Linux.
Как добавить asp.net worker через консоль
Если вы используете консоль или работаете на Linux, то воркер можно добавить с помощью следующей команды:
dotnet new worker
Как запустить .NET Worker через Windows-службу
Для того чтобы наш воркер работал в качестве службы, нам нужно реализовать механизм запуска, остановки или перезапуска в операционной системе. В шаблоне проекта это удобно реализовано. Для начала установите пакет через NuGet.
Microsoft.Extensions.Hosting.WindowsServices
В класс Program добавим вызов через метод UseServiceBaseLifetime():
public class Program { public static void Main(string[] args) { CreateHostBuilder(args).Build().Run(); } public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .UseServiceBaseLifetime() .ConfigureServices(services => { services.AddHostedService<Worker>(); }); }
Метод UseServiceBaseLifetime() проверяет, запущен ли Worker Service как служба, или вы запустили его локально в вашей среде работки типа VisualStudio. Т. е. вам не нужно проводить дополнительных манипуляций -- метод делает их за вас.
Установка Worker Service
После того, как мы указали метод UseServiceBaseLifetime(), мы можем установить наш воркер в качестве службы. Для начала опубликуйте его. В корне вашего проекта запустите команду.
dotnet publish -o c:\MyFolder\workerpub
Чтобы администрировать нашу службу, используйте утилиту от Microsoft SC:
sc create workertest binPath=c:\MyFolder\workerpub\WorkerTest.exe
Больше статей о программировании читайте в моем блоге.