Trabalhadores do .NET Core como Serviços do Windows

No .NET Core 3.0, introduzimos um novo tipo de modelo de aplicativo chamado Serviço de Trabalho. Este modelo foi desenvolvido para fornecer um ponto de partida para a criação de serviços de longa execução no .NET Core. Nesta explicação passo a passo, criaremos um trabalhador e o executaremos como um serviço do Windows.




Trabalhador de criação


Nota Nas versões de pré-lançamento, o modelo de trabalho está no mesmo menu que os modelos da web. Isso mudará em uma versão futura. Pretendemos colocar o modelo de Serviço do Trabalhador diretamente no Assistente para Criar Novo Projeto.


Criando um trabalhador no Visual Studio


imagem


imagem


imagem


Criando um trabalhador na linha de comando


Execute o dotnet new worker


imagem


Executando como um serviço do Windows


Para iniciar como um serviço do Windows, precisamos que o nosso trabalhador veja os sinais de início e parada do tipo ServiceBase .NET, que conecta os sistemas Windows Service aos aplicativos .NET. Para fazer isso, você precisa:


Adicionar Microsoft.Extensions.Hosting.WindowsServices NuGet Package


imagem


Adicione a chamada HostBuilder ao HostBuilder em Program.cs


 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>(); }); } 

Este método faz algumas coisas. Primeiramente, ele verifica se o aplicativo realmente funciona como um serviço do Windows, se não estiver, e executa noops, o que torna seguro chamar esse método ao executar localmente ou como um serviço do Windows.


Em segundo lugar, ele configura seu host para usar ServiceBaseLifetime . ServiceBaseLifetime trabalha com o ServiceBase para ajudar a controlar a vida útil do seu aplicativo quando ele é iniciado como um serviço do Windows. Isso substitui o ConsoleLifetime padrão que lida com sinais como CTL + C.


Instalar trabalhador


Depois que conseguimos o trabalhador usando ServiceBaseLifetime , precisamos configurá-lo:


Primeiro, vamos publicar o aplicativo. Instalaremos o Serviço Windows no local, o que significa que o executável será bloqueado toda vez que o serviço for iniciado. A publicação é uma boa maneira de garantir que todos os arquivos necessários para iniciar o serviço estejam em um local e prontos para instalação.


 dotnet publish -oc:\code\workerpub 

Em seguida, você pode usar o utilitário sc na linha de comando do administrador


 sc create workertest binPath=c:\code\workerpub\WorkerTest.exe 

Por exemplo:


imagem


Nota de segurança: Este comando inicia o serviço como um sistema local, que não é o que você precisa . Em vez disso, você deve criar uma conta de serviço e iniciar o serviço do Windows como esta conta. Não falaremos sobre isso aqui, mas há alguma documentação do ASP.NET aqui: https://docs.microsoft.com/en-us/aspnet/core/host-and-deploy/windows-service?view=aspnetcore- 2.2


Registo


O sistema de log possui um serviço de log de eventos, que pode enviar mensagens de log diretamente para o log de eventos do Windows. Para inserir o log de eventos, você pode adicionar o pacote Microsoft.Extensions.Logging.EventLog e modificar seu Program.cs :


 public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureLogging(loggerFactory => loggerFactory.AddEventLog()) .ConfigureServices(services => { services.AddHostedService<Worker>(); }); 

Trabalho adicional


Nas visualizações a seguir, planejamos melhorar o uso de Trabalhadores com Serviços do Windows:


  1. Renomear UseWindowsServiceBaseLifetime para usarWindowsService
  2. Adicione integração automática e aprimorada ao log de eventos na inicialização como um serviço do Windows.

Conclusão


Esperamos que você experimente nosso novo modelo e queira saber como ele funciona. Você pode enviar mensagens de erro ou sugestões aqui: https://github.com/aspnet/AspNetCore/issues/new/choose


Avatar
Glenn condron

Source: https://habr.com/ru/post/pt446512/


All Articles