WCF - Windows Service Hosting

Die Bedienung des Windows-Diensthostings ist einfach. Im Folgenden sind die Schritte mit der erforderlichen Codierung und Screenshots aufgeführt, die den Vorgang auf einfache Weise erläutern.

Step 1- Jetzt erstellen wir einen WCF-Dienst. Öffnen Sie Visual Studio 2008, klicken Sie auf Neu → Projekt und wählen Sie Klassenbibliothek aus der Vorlage aus.

Step 2- Fügen Sie dem Projekt die Referenz System.ServiceModel hinzu. Dies ist die Kernbaugruppe, die zum Erstellen des WCF-Dienstes verwendet wird.

Step 3- Als nächstes können wir die ISimpleCalulator-Schnittstelle erstellen. Fügen Sie das Attribut Service- und Betriebsvertrag wie unten gezeigt hinzu -

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 - Implementieren Sie die ISimpleCalculator-Schnittstelle wie unten gezeigt -

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- Erstellen Sie das Projekt und holen Sie sich die DLL. Jetzt sind wir mit dem WCF-Service fertig. Wir werden sehen, wie der WCF-Dienst im Windows-Dienst gehostet wird.

Note- In diesem Projekt wird erwähnt, dass wir sowohl Vertrag als auch Service (Implementierung) im selben Projekt erstellen. Es ist jedoch immer eine gute Praxis, wenn Sie beide in verschiedenen Projekten haben.

Step 6 - Öffnen Sie Visual Studio 2008 und klicken Sie auf Neu → Projekt und wählen Sie Windows-Dienst.

Step 7- Fügen Sie 'WindowsServiceHostedService.dll' als Referenz zum Projekt hinzu. Diese Baugruppe wird als Service dienen.

Step 8- Mit der OnStart-Methode des Dienstes kann der Hosting-Code für WCF geschrieben werden. Wir müssen sicherstellen, dass wir nur ein Service-Host-Objekt verwenden. Die OnStop-Methode wird verwendet, um den Service-Host zu schließen. Der folgende Code zeigt, wie der WCF-Dienst im Windows-Dienst gehostet wird.

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- Um den Dienst installieren zu können, benötigen wir die Installer-Klasse für den Windows-Dienst. Fügen Sie dem Projekt also eine neue Installer-Klasse hinzu, die von der Installer-Klasse geerbt wird. Im Folgenden wird der Code angegeben, der den Dienstnamen, den StartUp-Typ usw. des Dienstes anzeigt.

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- Erstellen Sie das Projekt, um die ausführbare Datei WCFHostedWindowsService.exe abzurufen. Als Nächstes müssen wir den Dienst mithilfe der Visual Studio-Eingabeaufforderung installieren. Öffnen Sie daher die Eingabeaufforderung, indem Sie auf Start → Alle Programme → Microsoft Visual Studio 2008 → Visual Studio-Tools → Visual Studio-Eingabeaufforderung klicken. Mit der Dienstprogramminstallation install util können Sie den Dienst wie unten gezeigt installieren.