jueves, 25 de septiembre de 2008

[WCF] Hospedando servicios

Bueno... en esta serie de posts sobre esta excitante tecnología que es WCF, hemos visto como crear un servicio, y como configurar un servicio usando el fichero de configuración.
Pero un servicio por si sólo no es nada: estaría bien que tuviese al menos un cliente (porqué si no es posible que se sienta un poco inútil). Vale, vale... aceptamos pulpo como animal de compañía, un servicio puede vivir sin ningún cliente pero lo que no me podeis negar es que lo que sí que necesita forzosamente es un servidor que lo acoja en su seno proceso.
Sí: los servicios en esto son como los virus: si no hay alguien que los hospede, son totalmente inútiles :)


Vale, tenemos claro que necesitamos hospedar nuestro flamante servicio pero... donde? Necesitamos comprar un "servidor de servicios" ? Podemos usar IIS? No lleva VS ningún servidor de piltrafilla que nos sirva en desarrollo? Pues (como ya viene siendo habitual en el mundo Microsoft) hay muchas maneras de enfocar la historia...


En general, el proceso que hospeda un servicio WCF es, básicamente, el CLR. Esto viene a significar que cualquier proceso .NET puede hospedar un servicio. Sí, sí: he dicho cualquier proceso. Una aplicación winforms? Pues sí. Una aplicación de línea de comandos? Pues también. Y claro está IIS también es una opción disponible, al igual que un servicio windows. Entonces? Bueno, decidir como hospedamos nuestros servicios es una decisión que se toma basándose en los requerimientos y en la arquitectura global de la solución. Cada sistema tiene sus ventajas y sus inconvenientes.
Por ejemplo, si usamos un ejecutable (sea winforms o linea de comandos), evidentemente el dicho ejecutable debe estar en marcha para que nuestros servicios esten disponibles. Esto invalida entornos desasistidos donde no habrá nadie para "poner en marcha" nuestro host, en estos entornos será mucho mejor un servicio windows. Por otro lado los hosts que son ejecutables estándar, son muy fáciles de crear y de depurar. De hecho no es extraño que durante el desarrollo, se use un servidor que sea un ejecutable, para migrar a un servidor "real" en una fase final.


Y... IIS? Hombre, pues claro. IIS puede hospedar servicios. Además, seguramente, es el mejor hosting posible, ya que si IIS sabe hacer algo és hospedar cosas y servirlas a sus clientes. Y que ventajas nos aporta IIS? Pues varias y muy importantes, entre las que destacaríamos temas de monitorizacion, activación del servicio on-demand y reciclaje de procesos. Estos temas deben "codificarse" a mano si uno opta por un host propio, mientras que en IIS nos vienen de serie. Además IIS es eficiente y altamente escalable... que razón para no usarlo? Lamentablemente podría haber una... Que pasa si mi transporte NO es http ó https? Sabe gestionar otros protocolos de transporte nuestro querido IIS? La respuesta, como todo es... depende.


Tienes XP y tienes un servicio que no usa http(s) como transporte? Pues lo siento, pero NO puedes usar IIS como hosting: En XP y 2003 IIS sólo soporta servicios con transporte http(s). Por otro lado si tienes Vista o 2008 entonces... entonces estás de suerte: WAS viene en tu ayuda!


Estoooo... WAS? Que narices es WAS? No hablábamos de IIS? WAS es el acrónimo de "Windows Activation Services", que es un nuevo sistema de activación de procesos, disponible sólo de Vista para adelante. IIS7 usa internamente WAS, para cualquier tipo de servicio (sea http(s) o no). Pero IIS7 no es un requisito de WAS, es decir podemos tener WAS sin IIS7 y hospedar cualquier tipo de servicio y no usar IIS7 a menos que lo necesitemos para otras cosas (p.ej. ASP.NET). Y no os preocupeis por las ventajas que nos ofrecía IIS7 (reciclaje de procesos, activación on-demand, etc): WAS también las ofrece (recuerdo: IIS7 usa WAS internamente).


Así, tendriamos las siguientes opciones:
  • Ejecutable (winforms o consola): Sencillo, fácil y útil en etapas de desarrollo. No apto en producción.
  • Servicio Windows: Única opción para hospedar servicios que no usen http(s) en XP y 2003.
  • IIS 5.1 ó 6 en XP y 2003: Ideal para todos los servicios que usen http(s). Ganamos todas las ventajas que nos ofrece IIS.
  • WAS: Ideal para cualquier servicio, pero requiere Vista, 2008 o posterior. Ganamos todas "las ventajas de IIS"... sin necsidad de tener IIS.
  • IIS7 en Vista o 2008: Ideal para cualquier tipo de servicio. Tenemos todas las ventajas de IIS y además permite interoperar nuestros servicios WCF con ASP.NET.
Una vez visto el abanico de opciones disponibles para hospedar nuestros servicios, vamos a ver un ejemplo de como hospedar un servicio WCF, usando la aplicación más simple posible: una aplicación de linea de comandos.


Para hospedar un servicio se usa la classe ServiceHost. El constructor de esta clase espera un parámetro que es un objeto Type con la información de la clase que implementa el servicio. Por ejemplo, si tengo la clase CalculadoraService que me implementa un servicio, para ponerlo en marcha, debo construir un ServiceHost y abrir el canal de comunicaciones:
ServiceHost shCalc = new ServiceHost(typeof(CalculadoraService));
shCalc.Open();
// ....
shCalc.Close();
 
Y listos! Esto es todo! Esta es la manera más simple de poner en marcha un servicio. El servicio utilizará los endpoints que haya definido en el fichero de configuración de la aplicación host.
Evidentemente con la clase ServiceHost podemos personalizar más el proceso de hosting, por ejemplo podemos configurar endpoints programáticamente (en lugar de usar el fichero deconfiguración).

Bueno.... ya sólo nos queda ver una cosilla para cerrar el círculo de esa introducción de WCF: Sí, sí... el cliente!


Saludos!

    miércoles, 3 de septiembre de 2008

    Catdotnet - Este viernes... de lujo!

    Pues sí!
    Este viernes, en catdotnet nos vestimos de gala! La razón?


    Muy fácil, tendremos una sesión de un autentico crack: Miguel Llopis, flamante vencedor de la última ImagineCup, estará en Igualada, para poner un poco de luz en todo lo que significa y es Oslo y el paradigma de SaaS.


    Además, para redondear el dia, Jordi Bonilla, nos ofrecerá una interesante charla sobre  software y servicios, los paradigmas SaaS y S+S... en fin, el complemento ideal a la charla de Miguel.


    Donde?
    En el Centre de Serveis a les empreses en Igualada (Av Mestre Muntaner 86).


    Cuando?

    Este viernes 05/09/2008 a las 19:00


    No falteis!! Os esperaaaaaaaaaaaaaaaaaaamos!!


    Editado el 15/09/2008: En la página de catdotnet, teneis la presentación de Miguel Llopis para que os la descargueis!