Architettura di programmazione delle applicazioni di servizioService Application Programming Architecture

Le applicazioni di servizio Windows sono basate su una classe che eredita dalla classe System.ServiceProcess.ServiceBase.Windows Service applications are based on a class that inherits from the System.ServiceProcess.ServiceBase class. Eseguire l'override dei metodi da questa classe e definirne le funzionalità per determinare il comportamento del servizio.You override methods from this class and define functionality for them to determine how your service behaves.

Le classi principali coinvolte nella creazione del servizio sono:The main classes involved in service creation are:

Inoltre, una classe denominata ServiceController può essere usata per modificare il servizio stesso.In addition, a class named ServiceController can be used to manipulate the service itself. Questa classe non è coinvolta nella creazione di un servizio, ma può essere usata per avviare e arrestare il servizio, passare comandi al servizio e restituire una serie di enumerazioni.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.

Definizione del comportamento del servizioDefining Your Service's Behavior

Nella classe del servizio si esegue l'override delle funzioni della classe di base, che determinano ciò che accade quando lo stato del servizio cambia in Gestione controllo servizi.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. La classe ServiceBase espone i metodi seguenti, di cui è possibile eseguire l'override per aggiungere comportamenti personalizzati.The ServiceBase class exposes the following methods, which you can override to add custom behavior.

MetodoMethod Override perOverride to
OnStart Indicare quali azioni devono essere eseguite all'avvio del servizio.Indicate what actions should be taken when your service starts running. È necessario scrivere codice in questa procedura per fare eseguire operazioni utili al servizio.You must write code in this procedure for your service to perform useful work.
OnPause Indicare le azioni da eseguire quando il servizio viene sospeso.Indicate what should happen when your service is paused.
OnStop Indicare le azioni da eseguire in caso di arresto del servizio.Indicate what should happen when your service stops running.
OnContinue Indicare le azioni da eseguire quando il servizio riprende il normale funzionamento dopo una sospensione.Indicate what should happen when your service resumes normal functioning after being paused.
OnShutdown Indicare le azioni da eseguire appena prima della chiusura del sistema, se il servizio è sempre in esecuzione.Indicate what should happen just prior to your system shutting down, if your service is running at that time.
OnCustomCommand Indicare le azioni da eseguire quando il servizio riceve un comando personalizzato.Indicate what should happen when your service receives a custom command. Per altre informazioni sui comandi personalizzati, vedere MSDN online.For more information on custom commands, see MSDN online.
OnPowerEvent Indicare come deve rispondere il servizio quando viene ricevuto un evento di risparmio energia, ad esempio la batteria in esaurimento o la sospensione del sistema.Indicate how the service should respond when a power management event is received, such as a low battery or suspended operation.

Nota

Questi metodi rappresentano gli stati che assume il servizio durante il ciclo di vita. Il servizio passa da uno stato al successivo.These methods represent states that the service moves through in its lifetime; the service transitions from one state to the next. Ad esempio, il servizio non risponderà mai a un comando OnContinue prima della chiamata di OnStart.For example, you will never get the service to respond to an OnContinue command before OnStart has been called.

Esistono vari altri metodi e proprietà interessanti.There are several other properties and methods that are of interest. Sono inclusi:These include:

  • Metodo Run nella classe ServiceBase.The Run method on the ServiceBase class. Questo è il punto di ingresso principale per il servizio.This is the main entry point for the service. Quando si crea un servizio usando il modello Servizio Windows, il codice viene inserito all'interno del metodo Main dell'applicazione per eseguire il servizio.When you create a service using the Windows Service template, code is inserted in your application's Main method to run the service. Il codice è simile al seguente: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)
    

    Nota

    Questi esempi usano una matrice di tipo ServiceBase, in cui è possibile aggiungere ogni servizio contenuto dall'applicazione, in modo che tutti i servizi possano poi essere eseguiti insieme.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. Se si crea solo un singolo servizio, tuttavia, è possibile scegliere di non usare la matrice e dichiarare semplicemente un nuovo oggetto che eredita da ServiceBase e quindi eseguirlo.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. Per un esempio, vedere Procedura: Scrivere servizi a livello di codice.For an example, see How to: Write Services Programmatically.

  • Una serie di proprietà per la classe ServiceBase.A series of properties on the ServiceBase class. Queste proprietà determinano i metodi che possono essere chiamati per il servizio.These determine what methods can be called on your service. Ad esempio, quando la proprietà CanStop è impostata su true, è possibile chiamare il metodo OnStop sul servizio.For example, when the CanStop property is set to true, the OnStop method on your service can be called. Quando la proprietà CanPauseAndContinue è impostata su true, è possibile chiamare i metodi OnPause e OnContinue.When the CanPauseAndContinue property is set to true, the OnPause and OnContinue methods can be called. Quando si imposta una di queste proprietà su true, è quindi necessario eseguire l'override e definire l'elaborazione per i metodi associati.When you set one of these properties to true, you should then override and define processing for the associated methods.

    Nota

    Il servizio deve eseguire l'override almeno di OnStart e OnStop per essere utile.Your service must override at least OnStart and OnStop to be useful.

È anche possibile usare un componente denominato ServiceController per comunicare con un servizio esistente e controllarne il comportamento.You can also use a component called the ServiceController to communicate with and control the behavior of an existing service.

Vedere ancheSee also