WCF - Hébergement de services Windows

Le fonctionnement de l'hébergement de services Windows est simple. Vous trouverez ci-dessous les étapes avec le codage requis et les captures d'écran qui expliquent le processus de manière simple.

Step 1- Créons maintenant un service WCF. Ouvrez Visual Studio 2008 et cliquez sur Nouveau → Projet et sélectionnez Bibliothèque de classes dans le modèle.

Step 2- Ajoutez la référence System.ServiceModel au projet. Il s'agit de l'assembly principal utilisé pour créer le service WCF.

Step 3- Ensuite, nous pouvons créer l'interface ISimpleCalulator. Ajoutez l'attribut de contrat de service et d'exploitation comme indiqué ci-dessous -

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ServiceModel;

namespace WindowsServiceHostedService{
   [ServiceContract]
   public interfaceISimpleCalculator {
      [OperationContract]
      int Add(int num1, int num2);

      [OperationContract]
      int Subtract(int num1, int num2);

      [OperationContract]
      int Multiply(int num1, int num2);

      [OperationContract]
      double Divide(int num1, int num2);
   }
}

Step 4 - Implémentez l'interface ISimpleCalculator comme indiqué ci-dessous -

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace WindowsServiceHostedService {
   Class SimpleCalulator : ISimpleCalculator {
      Public int Add(int num1, int num2) {
         return num1 + num2;
      }
      Public int Subtract(int num1, int num2) {
         return num1 - num2;
      }
      Public int Multiply(int num1, int num2) {
         return num1 * num2;
      }
      Public double Divide(int num1, int num2) {
         if (num2 != 0)
            return num1 / num2;
         else
            return 0;
      }
   }
}

Step 5- Construisez le projet et récupérez la dll. Maintenant, nous sommes prêts avec le service WCF. Nous allons voir comment héberger le service WCF dans le service Windows.

Note- Dans ce projet, il est mentionné que nous créons à la fois un contrat et un service (mise en œuvre) dans le même projet. Cependant, c'est toujours une bonne pratique si vous avez les deux dans des projets différents.

Step 6 - Ouvrez Visual Studio 2008 et cliquez sur Nouveau → Projet et sélectionnez Service Windows.

Step 7- Ajoutez «WindowsServiceHostedService.dll» comme référence au projet. Cette assemblée va servir de service.

Step 8- La méthode OnStart du service peut être utilisée pour écrire le code d'hébergement pour WCF. Nous devons nous assurer que nous n'utilisons qu'un seul objet hôte de service. La méthode OnStop est utilisée pour fermer l'hôte de service. Le code suivant montre comment héberger le service WCF dans le service Windows.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Linq;
using System.ServiceProcess;
using System.Text;
using System.ServiceModel;
using System.ServiceModel.Description;

namespace WCFHostedWindowsService {
   Partial class WCFHostedWindowsService : ServiceBase {
      ServiceHostm_Host;

      Public WCFHostedWindowsService() {
         InitializeComponent();
      }
      Private void InitializeComponent() {
         thrownewNotImplementedException();
      }
      protectedoverridevoidOnStart(string[] args) {
         if (m_Host != null) {
            m_Host.Close();
         }
        
         //Create a URI to serve as the base address
         UrihttpUrl = newUri("http://localhost:8090/WindowsServiceHostedService/SimpleCalculator");
        
         //Create ServiceHost
         m_Host = newServiceHost typeof(WindowsServiceHostedService.SimpleCalulator), httpUrl);
        
         //Add a service endpoint
         m_Host.AddServiceEndpoint (typeof(WindowsServiceHostedService.ISimpleCalculator), newWSHttpBinding(), "");
        
         //Enable metadata exchange
         ServiceMetadataBehaviorsmb = newServiceMetadataBehavior();
         smb.HttpGetEnabled = true;
         m_Host.Description.Behaviors.Add(smb);
        
         //Start the Service
         m_Host.Open();
      }
      protectedoverridevoidOnStop() {
         if (m_Host != null) {
            m_Host.Close();
            m_Host = null;
         }
      }
      staticvoid Main() {
         ServiceBase[] ServicesToRun;
         ServicesToRun = newServiceBase[] { 
            newWCFHostedWindowsService();
         }   
         ServiceBase.Run(ServicesToRun);
      }
   }
}

Step 9- Pour installer le service, nous avons besoin de la classe Installer pour le service Windows. Ajoutez donc une nouvelle classe Installer au projet, qui est héritée de la classe Installer. Le code ci-dessous indique le nom du service, le type de démarrage, etc. du service.

using System;
using System.Collections.Generic;
using System.Text;
using System.ServiceProcess;
using System.Configuration.Install;
using System.ComponentModel;
using System.Configuration;

namespace WCFHostedWindowsService {
   [RunInstaller(true)]
   Public class WinServiceInstaller : Installer {
      Private ServiceProcessInstaller process;
      Private ServiceInstaller service;

      Public WinServiceInstaller() {
         process = newServiceProcessInstaller();
         process.Account = ServiceAccount.NetworkService;
         service = newServiceInstaller();
         
         service.ServiceName = "WCFHostedWindowsService";
         service.DisplayName = "WCFHostedWindowsService";
         service.Description = "WCF Service Hosted";
         service.StartType = ServiceStartMode.Automatic;
         
         Installers.Add(process);
         Installers.Add(service);
      }
   }
}

Step 10- Générez le projet pour obtenir le fichier exécutable WCFHostedWindowsService.exe. Ensuite, nous devons installer le service à l'aide de l'invite de commande Visual Studio. Ouvrez donc l'invite de commande en cliquant sur Démarrer → Tous les programmes → Microsoft Visual Studio 2008 → Visual Studio Tools → Invite de commandes Visual Studio. À l'aide de l'application utilitaire d'installation, vous pouvez installer le service comme indiqué ci-dessous.