ASP .NET
Core 3.1 - Criando um Serviço do Windows
![]() |
Neste artigo vamos mostrar como hospedar uma aplicação ASP.NET Core Web APi como um serviço do Windows. |
|
Na maioria dos cenários em que precisamos criar um aplicativo de execução demorada, usar um serviço Windows pode ser uma boa opção. Lembrando que os serviços do Windows exigem um arquivo exe, ou seja, executável do nosso aplicativo para execução.
![]() |
A partir da versão 3.0 a .NET Core apresentou o template Worker Service que tem como objetivo simplificar a criação de aplicações que serão executadas como um processo.
Mas o Worker Service é assunto para outro artigo, hoje vamos falar de criar um aplicação web como um serviço.
E por que eu
deveria implantar aplicativos como um serviço do Windows?
Quando criamos um aplicativo, precisamos hospedá-lo em algum lugar para que os
usuários possam acessá-lo. Podemos hospedá-lo no IIS ou como um serviço do
Windows. Portanto, a seguir, apresentamos alguns motivos para hospedar
aplicativos como um serviço do Windows:
O .NET Core fornece um modo de implantação chamado SCD (Implantação Independente). Quando publicamos nosso aplicativo como SCD, ele fornecerá o executável do aplicativo, juntamente com as DLLs de runtime do .NET Core. Isso simplifica muito a criação de um serviço.
Então chega de prosa e vamos para a prática onde vamos criar uma aplicação ASP .NET Core Web API e depois vamos fazer a sua publicação como um serviço do Windows.
Recursos :
Criando o projeto no VS 2019 Community
Abra o VS 2019 Community e crie uma solução em branco via menu File-> New Project;
Selecione o template ASP .NET Core Web Application, e, Informe o nome AspNet_WindowsService;
A seguir selecione .NET Core e ASP .NET Core 3.1 e marque o template API e as configurações conforme figura abaixo:
Clique no botão Create e pronto. Teremos nossa aplicação Web API pronta.
Vamos alterar o controlador WeatherForecastController criado por padrão na pasta Controllers com o código abaixo:
using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Logging; using System; using System.Collections.Generic; using System.Linq;
namespace
AspNet_WindowsService.Controllers private readonly ILogger<WeatherForecastController> _logger;
public WeatherForecastController(ILogger<WeatherForecastController>
logger)
[HttpGet]
[HttpGet("tempo")] |
Aqui eu crie o método Action HttpGet Get() que retorna uma string com a data e hora atual quando a API for acessada via endpoint : http://locahost:5000/weatherforecast
Alterei o roteamento do outro método HttpGet GetWeather() para exibir a previsão do tempo quando for acessado via endpoint: http://locahost:5000/weatherforecast/tempo
Agora vamos precisar instalar o pacote Microsoft.Extensions.Hosting.WindowsServices no projeto para poder fazer a publicação da aplicação como um serviço.
Podemos usar a janela do Package Manager e digitar os comandos:
Ou usar a opção Manage Nuget Packages for Solution do menu Tools e na guia Browse selecionar os pacotes acima.
Com esse pacote instalado podemos prosseguir.
Alterando o arquivo Program do projeto API
Vamos agora alterar o código do arquivo Program para podermos publicar nosso projeto como um serviço do Windows.
Abra o arquivo Program e no método CreateHostBuilder inclua a chamada a .UseWindowsService() conforme mostrado abaixo:
public class Program { public static void Main(string[] args) { CreateHostBuilder(args).Build().Run(); } public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.UseWindowsService()
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
}
|
Pronto agora vamos publicar a aplicação.
Publicando o projeto WEB API
Clique com o botão direito sobre o nome do projeto e a seguir selecione Publish:
A seguir clique na opção Folder, escolha uma pasta para publicação e clique no link Advanced...
Na janela Publish na opção Deployment Mode selecione a opção : Self-Contained e em Target Runtime escolha win-x64 e clique no botão Save:
De volta a janela Pick a publish target clique em Create Profile:
A segyur clique no botão Publish:
Será exibida a janela Web Publish Activity mostrando o desenvolvimento da publicação. Ao final você verá a mensagem : Web App was published succesfully ......
Nota: Se quiser fazer a publicação usando a ferramenta de linha de comando NET CLI o comando usado é :
dotnet publish -c Release -r win-x64 --self-contained
|
Criando o serviço Windows
Agora entre na pasta onde o projeto foi publicado e localize a pasta bin\Release\netcoreapp3.1.
Dentro desta pasta você vai encontrar a pasta win-x64 onde estão as dlls publicadas.
Para criar um serviço do windows abra um prompt de comandos como administrador do sistema e digite o comando:
sc create <nome_serviço_windows> binPath= <caminho do exe da app>
|
Para o artigo o comando usado foi:
sc create WinServiceDemo binPath = C:\_asp2020\AspNet_WindowsService\AspNet_WindowsService\bin\Release\netcoreapp3.1\win-x64\AspNet_WindowsService.exe
|
Conforme mostra a figura abaixo:
Pronto o serviço foi criado com sucesso.
Acessando o serviço Windows
Para usar o serviço localize o serviço via Painel de Controle -> Ferramentas Administrativas -> Serviços
E clique com o botão direito sobre o nome do serviço, e a seguir clique em: Iniciar:
Agora é só alegria...
Abrindo o navegador e digitando http://localhost:5000 e a seguir os endpoints da nossa Web API disponibilizada como um serviço Windows, o resultado obtido será:
Esse é uma das alternativas para criar e hospedar uma aplicação Web como um serviço.
"Os meus olhos estão continuamente no Senhor, pois ele
tirará os meus pés da rede."
Salmos 25:15
Referências:
Jose C Macoratti (@macorati) | TwitterSeção Entity Framework - Macoratti .NET
ASP .NET Core - Implementando a segurança com ... - Macoratti
ASP.NET Core MVC - Criando um Dashboard ... - Macoratti.net
Entity Framework - Separando as classes das entidades do EDM(.edmx) em projetos distintos
C# - Gerando QRCode - Macoratti
VB .NET - Gerando, Salvando e lendo QRCode - Macoratti
ASP .NET - Gerando QRCode com a API do Google
C# - Tratando com serviços do Windows - Macoratti.net
Criando serviços para Windows com o TopShelf - Macoratti.net
Criando um serviço do Windows - Macoratti.net