Architecture de programmation d'une application de service
Remarque
Cet article ne s’applique pas aux services hébergés dans .NET. Pour obtenir le contenu des services Windows utilisant Microsoft.Extensions.Hosting.BackgroundService et le modèle Service Worker le plus récent, consultez :
Les applications de service Windows sont basées sur une classe qui hérite de la classe System.ServiceProcess.ServiceBase. Substituez les méthodes de cette classe et définissez des fonctionnalités pour qu’elles déterminent le comportement de votre service.
Les principales classes impliquées dans la création du service sont les suivantes :
System.ServiceProcess.ServiceBase : substituez les méthodes de la classe ServiceBase au moment de la création d’un service et définissez le code pour déterminer le fonctionnement de votre service dans cette classe héritée.
System.ServiceProcess.ServiceProcessInstaller et System.ServiceProcess.ServiceInstaller : utilisez ces classes pour installer et désinstaller votre service.
Par ailleurs, vous pouvez utiliser une classe nommée ServiceController pour manipuler le service. Cette classe n’est pas impliquée dans la création d’un service, mais vous pouvez vous en servir pour démarrer et arrêter le service, lui passer des commandes et retourner une série d’énumérations.
Définition du comportement de votre service
Dans votre classe de service, substituez les fonctions de classe de base qui déterminent ce qui se passe en cas de changement de l’état de votre service dans le Gestionnaire de contrôle des services. La classe ServiceBase expose les méthodes suivantes, que vous pouvez substituer pour ajouter un comportement personnalisé.
Méthode | Substituer pour |
---|---|
OnStart | Indiquer les actions à effectuer quand votre service commence à s’exécuter. Vous devez écrire du code dans cette procédure pour que votre service effectue des tâches utiles. |
OnPause | Indiquer ce qui doit se passer quand votre service est suspendu. |
OnStop | Indiquer ce qui doit se passer quand votre service arrête de s’exécuter. |
OnContinue | Indiquer ce qui doit se passer quand votre service revient à son fonctionnement normal après avoir été suspendu. |
OnShutdown | Indiquer ce qui doit se passer juste avant l’arrêt de votre système si votre service est en cours d’exécution à ce moment-là. |
OnCustomCommand | Indiquer ce qui doit se passer quand votre service reçoit une commande personnalisée. Pour plus d’informations sur les commandes personnalisées, consultez MSDN Online. |
OnPowerEvent | Indiquer comment le service doit répondre à la suite d’un événement de gestion de l’alimentation (batterie faible, opération suspendue, etc.). |
Notes
Ces méthodes représentent les états par lesquels passe le service au cours de sa vie (le service passe d’un état à l’autre). Par exemple, le service ne répond jamais à une commande OnContinue avant un appel à OnStart.
D’autres propriétés et méthodes présentent un intérêt. Il s’agit notamment des paramètres suivants :
La méthode Run sur la classe ServiceBase. Il s’agit du point d’entrée principal du service. Quand vous créez un service à l’aide du modèle de service Windows, le code est inséré dans la méthode
Main
de votre application pour exécuter le service. Ce code ressemble à ceci :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)
Notes
Ces exemples utilisent un tableau de type ServiceBase, dans lequel chaque service contenu dans votre application peut être ajouté. Tous les services peuvent ensuite être exécutés ensemble. Toutefois, si vous ne créez qu’un seul service, vous pouvez choisir de ne pas utiliser le tableau. Dans ce cas, déclarez simplement un nouvel objet héritant de ServiceBase et exécutez-le. Pour obtenir un exemple, consultez Guide pratique pour écrire des services par programmation.
Une série de propriétés sur la classe ServiceBase. Celles-ci déterminent les méthodes qui peuvent être appelées sur votre service. Par exemple, quand la propriété CanStop a la valeur
true
, la méthode OnStop sur votre service peut être appelée. Quand la propriété CanPauseAndContinue a la valeurtrue
, les méthodes OnPause et OnContinue peuvent être appelées. Si vous définissez l’une de ces propriétés avec la valeurtrue
, vous devez ensuite remplacer et définir le traitement des méthodes associées.
Vous pouvez également utiliser un composant appelé ServiceController pour communiquer avec un service existant et contrôler son comportement.