lunes, 20 de mayo de 2013

WCF - 5.2 Primer ejemplo (Hospedando en un servicio de windows)

Hospedar un WebService en una aplicación de consola puede no ser lo mas práctico. Este tipo de aplicaciones esta muy expuesta a ser cerradas por accidente, no se recuperan automáticamente y siempre deben estar vigiladas por usuarios finales. Quizá una de las mejores opciones para hospedar un servicio WCF, sea la de un servicio windows, ya que ofrece una serie de ventajas no presentes en alguna de las otras posibilidades. Entre estas, se encuentra la posibilidad de automáticamente recuperarse de una parada no esperada, así como el arranque del servicio antes de cualquier proceso de login, entre otras. Veamos como podemos hospedar un servicio WCF dentro de un servicio windows.

using System;
using System.ServiceModel;
using System.ServiceModel.Description;
using System.ServiceProcess;
 
using WebServices.Interfaces;
 
namespace WebServices.Host.WindowService
{
    partial class ReservaVuelos : ServiceBase
    {
        private ServiceHost objHost = null;
 
        public ReservaVuelos()
        {
            InitializeComponent();
 
            if (!System.Diagnostics.EventLog.SourceExists("ResourceReservaVuelos"))
            {
                System.Diagnostics.EventLog.CreateEventSource("ResourceReservaVuelos""logReservaVuelos");
            }
 
            this.objEventViewer.Source = "ResourceReservaVuelos";
            this.objEventViewer.Log = "logReservaVuelos";
            this.objEventViewer.WriteEntry("Se inicia log de eventos del servicio ReservaVuelos");
        }
 
        protected override void OnStart(string[] args)
        {
            this.objEventViewer.WriteEntry("Se inicia el servicio de reserva de vuelos");
 
            Uri objUri = new Uri("http://localhost:8080/ServicioReservaVuelos");
            BasicHttpBinding objBinding = new BasicHttpBinding();
 
            this.objHost = new ServiceHost(typeof(WebServices.Implementacion.ReservaVuelos), objUri);
            this.objHost.AddServiceEndpoint(typeof(IReservaVuelos), objBinding, "");
 
            try
            {
                /// Esto se utiliza para mostrar la metadata del servicio.
                ServiceMetadataBehavior objMetadata = new ServiceMetadataBehavior();
                objMetadata.HttpGetEnabled = true;
                this.objHost.Description.Behaviors.Add(objMetadata);
 
                this.objHost.Open();
            }
            catch (Exception ex)
            {
                this.objEventViewer.WriteEntry("Error: \n" + ex.Message);
            }
        }
 
        protected override void OnStop()
        {
            this.objEventViewer.WriteEntry("Se detiene el servicio de reserva de vuelos");
            
            if(this.objHost != null)
                this.objHost.Close();
        }
    }
}

Estos contenidos se publican bajo una licencia de Creative Commons Licencia Reconocimiento-No comercial-Compartir bajo la misma licencia 3.0 Colombia de Creative Commons

No hay comentarios:

Publicar un comentario