Arquitetura de programação do aplicativo de serviço
Observação
Este artigo não se aplica aos serviços hospedados no .NET. Para obter o conteúdo mais recente sobre os Serviços Windows usando Microsoft.Extensions.Hosting.BackgroundService e o modelo de Serviço de Trabalho, confira:
Os aplicativos de Serviço Windows baseiam-se em uma classe que é herdada da classe System.ServiceProcess.ServiceBase. Você substitui os métodos dessa classe e define funcionalidades para eles para determinar o comportamento do seu serviço.
As classes principais envolvidas na criação do serviço são:
System.ServiceProcess.ServiceBase – você substitui os métodos da classe ServiceBase ao criar um serviço e define o código para determinar como o seu serviço funciona nessa classe herdada.
System.ServiceProcess.ServiceProcessInstaller e System.ServiceProcess.ServiceInstaller – você usa essas classes para instalar e desinstalar o serviço.
Além disso, uma classe chamada ServiceController pode ser usada para manipular o serviço sozinha. Essa classe não é envolvida na criação de um serviço, mas pode ser usada para iniciar e parar o serviço, passar comandos para ele e retornar uma série de enumerações.
Definindo o comportamento do serviço
Em sua classe de serviço, você substitui as funções de classe base que determinam o que acontece quando o estado do serviço é alterado no Gerenciador de Controle de Serviços. A classe ServiceBase expõe os métodos a seguir, que você pode substituir para adicionar o comportamento personalizado.
Método | Substituir para |
---|---|
OnStart | Indica quais ações devem ser tomadas quando o serviço é iniciado. Você precisa escrever o código neste procedimento para que o serviço realize um trabalho útil. |
OnPause | Indica o que deve acontecer quando o serviço está em pausa. |
OnStop | Indica o que deve acontecer quando a execução do serviço é interrompida. |
OnContinue | Indica o que deve acontecer quando o serviço continua o funcionamento normal depois de ser colocado em pausa. |
OnShutdown | Indica o que deverá acontecer antes do sistema ser desligado, se o serviço estiver em execução no momento. |
OnCustomCommand | Indica o que deve acontecer quando o serviço recebe um comando personalizado. Para obter mais informações sobre comandos personalizados, consulte o MSDN online. |
OnPowerEvent | Indica como o serviço deve responder quando um evento de gerenciamento de energia é recebido, como bateria fraca ou operação de suspensão. |
Observação
Esses métodos representam os estados pelos quais o serviço passa em seu tempo de vida. O serviço faz a transição de um estado para o próximo. Por exemplo, você nunca fará com que o serviço responda a um comando OnContinue antes que OnStart seja chamado.
Há várias outras propriedades e métodos interessantes. Estão incluídos:
O método Run na classe ServiceBase. Este é o ponto de entrada principal para o serviço. Quando você cria um serviço usando o modelo de Serviço Windows, o código é inserido no método
Main
do aplicativo para executar o serviço. Esse código tem esta aparência:ServiceBase[] ServicesToRun; ServicesToRun = new ServiceBase[] { new Service1() }; Run(ServicesToRun);
Dim ServicesToRun() As System.ServiceProcess.ServiceBase ServicesToRun = New System.ServiceProcess.ServiceBase() {New Service1()} System.ServiceProcess.ServiceBase.Run(ServicesToRun)
Observação
Esses exemplos usam uma matriz do tipo ServiceBase, na qual cada serviço que o aplicativo contém pode ser adicionado e, em seguida, todos os serviços podem ser executados juntos. No entanto, se você estiver criando apenas um único serviço, poderá decidir não usar a matriz e simplesmente declarar um novo objeto herdado de ServiceBase e, em seguida, executá-lo. Para obter um exemplo, confira Como escrever serviços de forma programática.
Uma série de propriedades na classe ServiceBase. Elas determinam quais métodos podem ser chamados no serviço. Por exemplo, quando a propriedade CanStop está definida como
true
, o método OnStop no serviço pode ser chamado. Quando a propriedade CanPauseAndContinue está definida comotrue
, os métodos OnPause e OnContinue podem ser chamados. Ao definir uma dessas propriedades paratrue
, você deverá substituir e definir o processamento dos métodos associados.
Você também pode usar um componente chamado ServiceController para comunicar-se com um serviço existente e controlar seu comportamento.