Veja nesse artigo como criar um serviço que rode junto com o seu sistema operacional Windows.
Quem nunca precisou criar um serviço que rode 24/7 dentro de um servidor? Existem muitos cenários, como: Importação de dados em um horário X, migração de arquivos de um server para um outro de backup, etc.
Hoje eu vou mostrar como criar um serviço Windows (Windows Service) e como instalar ele em um servidor Windows Server 2016.
Para os próximos passos será necessário ter o Visual Studio instalado no seu computador. Caso você ainda não tenha, a Microsoft disponibiliza uma versão gratuita chamada Community, que pode ser baixada através deste link.
Abra o seu Visual Studio e siga os seguintes passos: File > New Project > Visual C# > Windows Classic Desktop e selecione Windows Service (.NET Framework). Clique em OK e dê um nome para o seu projeto. Caso tudo esteja ok, você verá a imagem abaixo dentro do seu Visual Studio:
O próximo passo será adicionar um instalador para o nosso serviço. Para isso, clique com o botão direito do seu mouse na tela da imagem anterior e selecione Add Instaler. Você será direcionado para uma outra tela de [Design]. Clique em serviceInstaller com o botão direito do seu mouse e selecione properties.
Esse passo abrirá um aba no canto direito da sua IDE. Nela você deve informar os dados do seu serviço, como: Nome, Descrição e o nome do serviço (que aparecerá na listagem de serviços do seu servidor Windows).
Abaixo você tem uma imagem demonstrando como eu preenchi os dados do meu serviço para esse artigo:
O próximo passo será criar um rotina para o nosso serviço. Para o nosso exemplo, eu irei criar um método que toda vez que o serviço rode, ele também registre a data e o horário em um arquivo .txt, algo como um log.
Abra o arquivo Service.cs e atualize ele com o trecho de código abaixo:
private Timer _timer;
public Service1()
{
InitializeComponent();
}
protected override void OnStart(string[] args)
{
_timer = new Timer(CriarLog, null, 0, 120000);
}
protected override void OnStop()
{
}
private void CriarLog(object state)
{
StreamWriter vWriter = new StreamWriter(@"C:\Logs\log.txt", true);
vWriter.WriteLine("serviço rodando:" + DateTime.Now);
vWriter.Flush();
vWriter.Close();
}
Analisando esse trecho de código, nós temos:
- 02: um construtor que inicializará o nosso service (padrão na criação do service)
- 07: esse método será o primeiro a ser chamado quando o serviço inicializar. Note que ele está chamando um método CriarLog de dois em dois minutos
- 29: o método (OnStop) é chamado toda vez que o serviço parar
- 33: nesse método que devemos criar nossas regras de negócio. Eu poderia ter criado ele em uma outra class, mas como é somente um exemplo, eu deixei na mesma
Para instalar o nosso serviço eu irei utilizar o InstallUtil do .NET Framework. Para isso, abra um cmd como Administrador no seu servidor e navegue até o caminho abaixo:
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\
Como esse é somente um teste, deixarei o build como Debug, mas caso você já tenha finalizado o seu service e esteja pronto para produção, basta alterar o build de Debug para Release como está na imagem abaixo:
Build o seu projeto e em seguida navegue até a pasta bin e copie a pasta Debug. Conforme mencionado acima, nós iremos utilizar ela para instalar o nosso service.
InstallUtil.exe (caminho do seu executável).exe
Caso o seu serviço tenha sido instalado com sucesso, você receberá a mensagem: “Instalação transacionada concluída.”. Abaixo você tem uma imagem demonstrando esse passo:
Agora abra os serviços do seu servidor e note que o seu service está la. Para verificar os seus detalhes, dê dois cliques nele. Esse passo abrirá uma janela com as suas propriedades:
Note que ele está com o nome e a descrição que nós configuramos no Visual Studio. Clique em iniciar e vá até o diretório que você escolheu para criação dos seus arquivos de Log. Note que o nosso arquivo está lá.
Abra o arquivo e note que ele passa pelo método CriarLog e registra no arquivo log.txt de dois em dois minutos. Abaixo você tem uma imagem demonstrando esse passo:
A ideia deste artigo era demonstrar um passo a passo de como criar e publicar um projeto Windows Service. Espero que tenham gostado e até a próxima, pessoal!