Arquitetura de programação de aplicativos de serviço
Nota
Este artigo não se aplica a serviços hospedados no .NET. Para obter o conteúdo mais recente sobre os serviços do Windows que usam Microsoft.Extensions.Hosting.BackgroundService e o modelo Serviço de Trabalho, consulte:
Os aplicativos de serviço do Windows são baseados em uma classe que herda da System.ServiceProcess.ServiceBase classe. Você substitui métodos dessa classe e define a funcionalidade para que eles determinem como seu serviço se comporta.
As principais classes envolvidas na criação de serviços são:
System.ServiceProcess.ServiceBase — Você substitui métodos da classe ao ServiceBase criar um serviço e define o código para determinar como 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 nomeada ServiceController pode ser usada para manipular o próprio serviço. Essa classe não está 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 seu serviço
Na classe de serviço, você substitui 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 ServiceBase classe expõe os seguintes métodos, que você pode substituir para adicionar comportamento personalizado.
Método | Substituir para |
---|---|
OnStart | Indique quais ações devem ser tomadas quando o serviço começar a ser executado. Você deve escrever código neste procedimento para que seu serviço execute um trabalho útil. |
OnPause | Indique o que deve acontecer quando o serviço for pausado. |
OnStop | Indique o que deve acontecer quando o serviço parar de funcionar. |
OnContinue | Indique o que deve acontecer quando o serviço retomar o funcionamento normal após ser pausado. |
OnShutdown | Indique o que deve acontecer imediatamente antes do encerramento do sistema, se o serviço estiver em execução nesse momento. |
OnCustomCommand | Indique o que deve acontecer quando o serviço receber um comando personalizado. Para obter mais informações sobre comandos personalizados, consulte MSDN online. |
OnPowerEvent | Indique como o serviço deve responder quando um evento de gerenciamento de energia é recebido, como bateria fraca ou operação suspensa. |
Nota
Esses métodos representam estados pelos quais o serviço se move em seu tempo de vida; O serviço transita de um estado para o seguinte. Por exemplo, você nunca conseguirá que o serviço responda a um OnContinue comando antes OnStart de ter sido chamado.
Existem várias outras propriedades e métodos que são de interesse. Estes são, entre outros:
O Run método na ServiceBase classe. Este é o principal ponto de entrada para o serviço. Quando você cria um serviço usando o modelo de serviço do Windows, o código é inserido no método do
Main
seu aplicativo para executar o serviço. Este 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)
Nota
Esses exemplos usam uma matriz do tipo ServiceBase, na qual cada serviço que seu 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á optar por não usar a matriz e simplesmente declarar um novo objeto herdado e ServiceBase executá-lo. Para obter um exemplo, consulte Como escrever serviços programaticamente.
Uma série de propriedades na ServiceBase classe. Estes determinam quais métodos podem ser chamados no seu serviço. Por exemplo, quando a CanStop propriedade é definida como
true
, o OnStop método em seu serviço pode ser chamado. Quando a CanPauseAndContinue propriedade é definida comotrue
, os OnPause métodos e OnContinue podem ser chamados. Ao definir uma dessas propriedades comotrue
, você deve substituir e definir o processamento para os métodos associados.
Você também pode usar um componente chamado para ServiceController se comunicar e controlar o comportamento de um serviço existente.