Worker Services com .NET Core 3

Sérgio Prates
Nov 2 · 3 min read

Fala galera, no post de hoje irei abordar como podemos construir os famosos “windows services” utilizando .NET Core e já sabe né? Com direito a rodar no linux, por isso no título do post chamo de “Worker Services”.

Para começar vamos criar um projeto .NET Core 3.0 e no momento de selecionar um template escolher Worker Service.

Após criar o projeto, ele terá a seguinte estrutura:

Vamos dar uma olhada mais de perto na classe program:

Aqui é onde configuramos coisas relacionadas à inicialização da aplicação, veja que temos o método “ConfigureServices” onde podemos configurar a injeção de dependência do nosso serviço.

Agora, vamos dar um zoom na nossa classe Worker

Aqui é onde programamos o que o serviço realmente fará e após a execução, aplicamos um delay para que ele aguarde a hora da próxima execução. Aqui as coisas funcionam de forma idêntica ao que estamos acostumados em apis, como por exemplo acesso ao app settings, requisições com http client e etc. Show não?

Para nosso serviço rodar no Windows, precisamos instalar um pacote nuget:

install-package Microsoft.Extensions.Hosting.WindowsServices

Esse pacote será responsável por gerenciar o ciclo de vida do Windows Service, agora para o linux, visto que a forma de execução é diferente, precisamos de outro pacote:

install-package Microsoft.Extensions.Hosting.Systemd

Esse outro pacote será responsável por gerenciar o ciclio de vida do serviço no linux, agora precisamos voltar na classe worker e adicionar duas linhas de código:

O mais interessante disso, é que caso você rode no linux, a parte do useWindowsServices tem inteligência para saber que ele não deve ser executado, isso é feito internamente no método, permitindo utilizar o mesmo pacote para ambos sistemas operacionais.

Para instalar o serviço na sua máquina, basta fazer um build com configuração de release e utilizar a forma padrão de instalação do sistema operacional.

Por exemplo, no windows, você pode utilizar tanto o power shell quanto o sc util:

sc.exe create MeuServico binpath=./caminho/executavel.exe

No linux, é necessário criar um arquivo na pasta /etc/systemd/system com a extensão .service e que neste exemplo, pode conter o conteúdo abaixo:

[Unit]
Description=Meu Servico

[Service]
ExecStart=/bin/dotnet/dotnet WorkerService.NETCore3.dll
WorkingDirectory=/usr/local/services
User=usuario
Group=usuario
Restart=on-failure
SyslogIdentifier=dotnet-meu-ervicoivateTmp=true

[Install]
WantedBy=multi-user.target

Feito isso, o serviço pode ser instalado com o seguinte comando:

systemctl enable worker-netcore3.service

Para iniciar o serviço, você pode rodar o comando:

systemctl start worker-netcore3.service

Por hoje é isso, espero que tenha te ajudado!

Código Fonte:

Sérgio Prates

Written by

Software Engineer, Microsoft Certified Solutions Developer (MCSD), Solutions Associate (MCSA), Certified Professional (MCP), Technical Writer and Speaker

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade