Arquitetura de programação do aplicativo de serviçoService Application Programming Architecture

Os aplicativos de Serviço Windows baseiam-se em uma classe que é herdada da classe System.ServiceProcess.ServiceBase.Windows Service applications are based on a class that inherits from the System.ServiceProcess.ServiceBase class. Você substitui os métodos dessa classe e define funcionalidades para eles para determinar o comportamento do seu serviço.You override methods from this class and define functionality for them to determine how your service behaves.

As classes principais envolvidas na criação do serviço são:The main classes involved in service creation are:

Além disso, uma classe chamada ServiceController pode ser usada para manipular o serviço sozinha.In addition, a class named ServiceController can be used to manipulate the service itself. 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.This class is not involved in the creation of a service, but can be used to start and stop the service, pass commands to it, and return a series of enumerations.

Definindo o comportamento do serviçoDefining Your Service's Behavior

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.In your service class, you override base class functions that determine what happens when the state of your service is changed in the Services Control Manager. A classe ServiceBase expõe os métodos a seguir, que você pode substituir para adicionar o comportamento personalizado.The ServiceBase class exposes the following methods, which you can override to add custom behavior.

MétodoMethod Substituir paraOverride to
OnStart Indica quais ações devem ser tomadas quando o serviço é iniciado.Indicate what actions should be taken when your service starts running. Você precisa escrever o código neste procedimento para que o serviço realize um trabalho útil.You must write code in this procedure for your service to perform useful work.
OnPause Indica o que deve acontecer quando o serviço está em pausa.Indicate what should happen when your service is paused.
OnStop Indica o que deve acontecer quando a execução do serviço é interrompida.Indicate what should happen when your service stops running.
OnContinue Indica o que deve acontecer quando o serviço continua o funcionamento normal depois de ser colocado em pausa.Indicate what should happen when your service resumes normal functioning after being paused.
OnShutdown Indica o que deverá acontecer antes do sistema ser desligado, se o serviço estiver em execução no momento.Indicate what should happen just prior to your system shutting down, if your service is running at that time.
OnCustomCommand Indica o que deve acontecer quando o serviço recebe um comando personalizado.Indicate what should happen when your service receives a custom command. Para obter mais informações sobre comandos personalizados, consulte o MSDN online.For more information on custom commands, see 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.Indicate how the service should respond when a power management event is received, such as a low battery or suspended operation.

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.These methods represent states that the service moves through in its lifetime; the service transitions from one state to the next. Por exemplo, você nunca fará com que o serviço responda a um comando OnContinue antes que OnStart seja chamado.For example, you will never get the service to respond to an OnContinue command before OnStart has been called.

Há várias outras propriedades e métodos interessantes.There are several other properties and methods that are of interest. Elas incluem:These include:

  • O método Run na classe ServiceBase.The Run method on the ServiceBase class. Este é o ponto de entrada principal para o serviço.This is the main entry point for the service. 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.When you create a service using the Windows Service template, code is inserted in your application's Main method to run the service. Esse código tem esta aparência:This code looks like this:

    System.ServiceProcess.ServiceBase[] ServicesToRun;
    ServicesToRun = new System.ServiceProcess.ServiceBase[] 
        { new Service1() };
    System.ServiceProcess.ServiceBase.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.These examples use an array of type ServiceBase, into which each service your application contains can be added, and then all of the services can be run together. 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.If you are only creating a single service, however, you might choose not to use the array and simply declare a new object inheriting from ServiceBase and then run it. Para obter um exemplo, consulte Escrever serviços de forma programática.For an example, see How to: Write Services Programmatically.

  • Uma série de propriedades na classe ServiceBase.A series of properties on the ServiceBase class. Elas determinam quais métodos podem ser chamados no serviço.These determine what methods can be called on your service. Por exemplo, quando a propriedade CanStop está definida como true, o método OnStop no serviço pode ser chamado.For example, when the CanStop property is set to true, the OnStop method on your service can be called. Quando a propriedade CanPauseAndContinue está definida como true, os métodos OnPause e OnContinue podem ser chamados.When the CanPauseAndContinue property is set to true, the OnPause and OnContinue methods can be called. Ao definir uma dessas propriedades para true, você deverá substituir e definir o processamento dos métodos associados.When you set one of these properties to true, you should then override and define processing for the associated methods.

    Observação

    O serviço precisará substituir pelo menos OnStart e OnStop para ser útil.Your service must override at least OnStart and OnStop to be useful.

Você também pode usar um componente chamado ServiceController para comunicar-se com um serviço existente e controlar seu comportamento.You can also use a component called the ServiceController to communicate with and control the behavior of an existing service.

Consulte tambémSee also