WCF - Alojamiento de servicios de Windows

El funcionamiento del alojamiento de servicios de Windows es sencillo. A continuación, se muestran los pasos con la codificación necesaria y las capturas de pantalla que explican el proceso de una manera sencilla.

Step 1- Ahora creemos un servicio WCF. Abra Visual Studio 2008 y haga clic en Nuevo → Proyecto y seleccione Biblioteca de clases en la plantilla.

Step 2- Agregar referencia System.ServiceModel al proyecto. Este es el ensamblado principal que se usa para crear el servicio WCF.

Step 3- A continuación, podemos crear la interfaz ISimpleCalulator. Agregue el atributo Contrato de servicio y operación como se muestra a continuación:

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 - Implemente la interfaz ISimpleCalculator como se muestra a continuación -

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- Construya el proyecto y obtenga el dll. Ahora, estamos listos con el servicio WCF. Vamos a ver cómo alojar el servicio WCF en el servicio de Windows.

Note- En este proyecto, se menciona que estamos creando tanto Contrato como Servicio (implementación) en el mismo proyecto. Sin embargo, siempre es una buena práctica si tiene ambos en proyectos diferentes.

Step 6 - Abra Visual Studio 2008 y haga clic en Nuevo → Proyecto y seleccione Servicio de Windows.

Step 7- Agregue 'WindowsServiceHostedService.dll' como referencia al proyecto. Esta asamblea va a actuar como un servicio.

Step 8- El método OnStart del servicio se puede utilizar para escribir el código de alojamiento para WCF. Tenemos que asegurarnos de que estamos utilizando solo un objeto de host de servicio. El método OnStop se utiliza para cerrar el host de servicio. El siguiente código muestra cómo hospedar el servicio WCF en el servicio de 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- Para instalar el servicio, necesitamos tener la clase Installer para el servicio de Windows. Por lo tanto, agregue una nueva clase de instalador al proyecto, que se hereda de la clase de instalador. A continuación se muestra el código que muestra el nombre del servicio, el tipo de inicio, etc. del servicio.

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- Genere el proyecto para obtener el archivo ejecutable WCFHostedWindowsService.exe. A continuación, debemos instalar el servicio mediante el símbolo del sistema de Visual Studio. Así que abra el símbolo del sistema haciendo clic en Inicio → Todos los programas → Microsoft Visual Studio 2008 → Visual Studio Tools → Símbolo del sistema de Visual Studio. Con la aplicación de utilidad de instalación, puede instalar el servicio como se muestra a continuación.