Comment : héberger un service WCF dans un service Windows managé
Cette rubrique décrit les étapes de base requises pour créer un service Windows Communication Foundation (WCF) hébergé par un service Windows. Le scénario est activé par le service Windows managé qui héberge l'option de service WCF à durée d'exécution longue en dehors des services IIS (Internet Information Services) dans un environnement sécurisé qui n'est pas activé pour les messages. La durée de vie du service est contrôlée par le système d'exploitation. Cette option d'hébergement est disponible dans toutes les versions de Windows.
Les services Windows peuvent être gérés avec Microsoft.ManagementConsole.SnapIn dans MMC (Microsoft Management Console) et peuvent être configurés pour démarrer automatiquement lorsque le système démarre. Cette option d'hébergement consiste à enregistrer le domaine d'application (AppDomain) qui héberge un service WCF en tant que service Windows managé afin que la durée de vie de processus du service soit contrôlée par le Gestionnaire de contrôle des services (SCM) pour les services Windows.
Le code du service inclut l'implémentation du contrat de service, d'une classe de service Windows et d'une classe Installer. La classe d'implémentation du CalculatorService est un service WCF. Le CalculatorWindowsService est un service Windows. Pour prétendre au titre de service Windows, la classe hérite de la ServiceBase et implémente les méthodes OnStart et OnStop. Dans la méthode OnStart, un objet ServiceHost est créé pour le type CalculatorService et est ouvert. Dans la méthode OnStop, le service est arrêté et éliminé. L'hôte est également chargé de fournir une adresse de base à l'hôte de service, qui a été configuré dans les paramètres d'application. La classe Installer, qui hérite de Installer, permet à l'outil Installutil.exe d'installer le programme comme un service Windows.
Construction du service et ajout du code d'hébergement
Définissez le contrat de service ICalculator à l'aide d'une interface pour le service de calculatrice dans le fichier Service.cs.
Implémentez le contrat de service dans une classe CalculatorService dans le fichier Service.cs comme un service WCF, en faisant en sorte qu'il hérite de l'interface ICalculator de WCF.
Implémentez le service Windows en faisant en sorte qu'il hérite de la classe ServiceBase. Substituez la méthode OnStart pour créer et ouvrir une instance de ServiceHost. Substituez la méthode OnStop pour fermer l'instance de ServiceHost. Créez une instance de l'instance CalculatorService et nommez-la "WCFWindowsServiceSample". Fournissez un point d'entrée pour l'application.
Créez une classe ProjectInstaller qui hérite de Installer et qui est marquée en attribuant à RunInstallerAttribute la valeur true, cela afin que le programme d'installation d'actions personnalisées de Visual Studio ou l'outil Installutil.exe soit appelé lorsque l'assembly est installé.
Fournissez l'adresse de base pour le service dans la configuration.
Démarrez et exécutez le service.
Compilez le service pour générer l'exécutable Service.exe.
Pour installer le service Windows, tapez
installutil bin\service.exe
à l'invite de commandes. (L'outil est localisé dans le répertoire d'installation de Microsoft.NET Framework si le chemin d'accès n'est pas déjà défini.) Tapezservices.msc
à l'invite de commandes pour accéder au Gestionnaire de contrôle des services (SCM). Le service WINDOWS doit apparaître dans les services comme "WCFWindowsServiceSample." Le service WCF peut répondre aux clients uniquement si le service WINDOWS est en cours d'exécution. Pour démarrer le service, cliquez avec le bouton droit sur ce dernier dans le Gestionnaire de contrôle des services et sélectionnez "Démarrer" ou tapeznet start
WCFWindowsServiceSample
à l'invite de commandes.Si vous apportez des modifications au service, vous devez d'abord l'arrêter et le désinstaller. Pour arrêter le service, cliquez avec le bouton droit sur ce dernier dans le Gestionnaire de contrôle des services et sélectionnez "Arrêter" ou tapez
net stop
WCFWindowsServiceSample
à l'invite de commandes. Notez que si vous arrêtez le service WINDOWS puis exécutez le client, une exception EndpointNotFoundException se produit lorsqu'un client tente d'accéder au service. Pour désinstaller le service Windows, tapezinstallutil /u
bin\service.exe
à l'invite de commandes.
Exemple
Le code suivant affiche le contenu du fichier Service.cs avec le contrat, son implémentation, l'installation du service WINDOWS et le code d'hébergement.
Comme pour l'option d'auto-hébergement, l'environnement d'hébergement du service Windows requiert que le code d'hébergement soit écrit dans le cadre de l'application. Le service est implémenté en tant que programme .exe et contient son propre code d'hébergement. Dans d'autres environnements d'hébergement, tels que le service d'activation de processus de Windows (WAS) et les services IIS (Internet Information Services), il n'est pas nécessaire que les développeurs écrivent le code d'hébergement.
Voir aussi
Concepts
Hébergement dans une application managée
Hébergement de services