Trabalhadores do .NET Core como Serviços do Windows

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



Crie um trabalhador


Observação: Nas nossas versões de prévia, 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 dentro do assistente para criar novo projeto.


Criar um trabalhador no Visual Studio


imagem


imagem


imagem


Crie um trabalhador na linha de comando


Execute o dotnet new worker


imagem


Executar como um serviço do Windows


Para executar como um serviço do Windows, precisamos que o nosso funcionário escute os sinais de início e parada do ServiceBase o tipo .NET que expõe os sistemas de serviço do Windows a aplicativos .NET. Para fazer isso, queremos:


Adicione o pacote NuGet Microsoft.Extensions.Hosting.WindowsServices


imagem


Adicione a chamada UseServiceBaseLifetime ao HostBuilder em nosso 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. Primeiro, ele verifica se o aplicativo está ou não sendo executado como um serviço do Windows; se não estiver, oops, o que torna esse método seguro para ser chamado ao executar localmente ou ao executar como um serviço do Windows. Você não precisa adicionar cláusulas de guarda e pode executar o aplicativo normalmente quando não estiver instalado como um Serviço do Windows.


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


Instale o trabalhador


Depois que tivermos nosso trabalhador usando o ServiceBaseLifetime , precisaremos instalá-lo:


Primeiro, vamos publicar o aplicativo. Instalaremos o serviço Windows no local, o que significa que o exe será bloqueado sempre que o serviço estiver sendo executado. A etapa de publicação é uma ótima maneira de garantir que todos os arquivos necessários para executar o serviço estejam em um só lugar e prontos para instalação.


 dotnet publish -oc:\code\workerpub 

Em seguida, podemos usar o utilitário sc em um prompt de comando do administrador


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

Por exemplo:


imagem


Nota de segurança: Este comando tem o serviço executado como sistema local, o que geralmente não é algo que você deseja fazer . Em vez disso, você deve criar uma conta de serviço e executar o serviço do Windows como essa conta. Não falaremos sobre isso aqui, mas há alguma documentação nos documentos do ASP.NET falando sobre isso 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 provedor de Log de Eventos que pode enviar mensagens de log diretamente para o Log de Eventos do Windows. Para registrar no 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 futuro


Nas próximas visualizações, planejamos melhorar a experiência do uso de Trabalhadores com Serviços do Windows:


  1. Renomear UseWindowsServiceBaseLifetime para usarWindowsService
  2. Adicione uma integração automática e aprimorada ao Log de Eventos ao executar como um Serviço do Windows.

Conclusão


Esperamos que você experimente este novo modelo e deseje que nos informe como ele funciona. Você pode registrar quaisquer bugs ou sugestões aqui: https://github.com/aspnet/AspNetCore/issues/new/choose


Avatar
Glenn condron

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


All Articles