Mi primer servicio con WCF en IIS

Comienzo la actualización de tecnologías de un sitio empresarial, y una de las cosas que más me llamaron la atención es la excelente plataforma para desarrollo y despliegue de servicios que tiene Windows Communication Foundation (WCF).
Aquí les dejo mis primeras experiencias a la hora crear un servicio. Por ahora sólo crearemos el entorno de desarrollo de un nuevo servicio, y lo publicaremos en IIS para que otras aplicaciones accedan a él.
El esquema de despliegue de esta aplicación de ejemplo puede ser criticado, lógicamente, pero es el que me ha parecido hasta el momento el más factible para una separación en capas de las funcionalidades de nuestra solución.
Biblioteca WCF
Lo primero que hago es crear una biblioteca WCF para la cual VS2008 nos provee de una plantilla de proyecto. Inmediatamente se crea un contrato IService1.cs que es una interfaz que expondrá los métodos del servicio.

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

namespace WcfServiceLibrary1
{
// NOTE: If you change the interface name "IService1" here, you must also update the reference to "IService1" in App.config.
[ServiceContract]
public interface IService1
{
[OperationContract]
string GetData(int value);

[OperationContract]
CompositeType GetDataUsingDataContract(CompositeType composite);

// TODO: Add your service operations here
}

En esta plantilla se incluye el mecanismo de serialización de datos complejos. Para esto sólo debemos usar los decorators [DataContract] y [DataMember]. El ejemplo que provee la plantilla es bastante intuitivo. En el fichero Service1.cs se implementa la interfaz del contrato conteniendo la lógica de nuestro servicio.
Compilamos y ya tenemos nuestra librería de servicios.
Aplicación de Servicios
Ahora necesitamos una aplicación de servicios usando la plantilla de proyectos que nos brinda VS2008. En este proyecto aparece un esquema de archivos similar al del proyecto anterior pero eliminaremos los archivos relativos a servicios (he escogido este diseño de despliegue porque me parece muchos más organizado, pero una vez visto las cosas básicas de WCF queda a la elección del desarrollador).
Entonces nos quedamos con un proyecto de aplicación de servicios en el que sólo aparece el archivo Service1.svc (luego de eliminar el cs asociado) para nuestro servicio y el web.config, naturalmente.
Puede que aparezcan algunos errores a aquellos desesperados que ya están compilando (o que usan Resharper), y es que debemos referenciar nuestra biblioteca de servicios para que la interfaz del contrato quede expuesta al servicio como tal (Service1.svc)
El servicio se debe ver así:
<%@ ServiceHost Language="C#" Debug="true" Service="WcfServiceApplication.Service1" CodeBehind="Service1.svc.cs" %>

Pero debemos modificarlo para que tome la ubicación del servicio de nuestra biblioteca a algo como esto:
<%@ ServiceHost Language="C#" Debug="true" Service="WcfServiceLibrary1.Service1" %>

Configurar el servicio
Para esto nos paramos sobre el archivo web.config de la aplicación host en el Solution Explorer, y con el click derecho accedemos a "Edit WCF Configuration" una herramienta que nos permite lidiar con el engorroso proceso de modificar propiedades en un archivo tipo config.
Creamos un nuevo servicio siguiendo un asistente muy intuitivo, que nos pide el tipo del servicio por lo que debemos darle el camino a la dll de nuestra biblioteca, previamente compilada.
En el modo de comunicación para este primer intento recomendamos HTTP. Aquí podrán encontrar más información al respecto. El método de interoperabilidad que seleccionaremos será "Advanced..." ya que usamos tecnología WCF con la especificación "Simplex...". Y finalmente asignamos un endpoint a nuestro servicio que puede ser absoluto o relativo, pero esta es «mermelada para otro pan», por el momento recomiendo dejar en blanco. Los impacientes pueden desplegar la aplicación en IIS y podemos ver "algo" de nuestro servicio en http://localhost/WcfServiceApplication1/Service1.svc, los reservados en cambio pueden esperar a que se configure la aplicación para trabajar en IIS de una forma más expédita que nos ofrece VS2008.
Comportamiento de servicio
Ahora añadiremos un comportamiento de servicio. Volvemos al Service Configuration Editor y creamos un nuevo service behavior configuration añadimos un elemento tipo serviceMetadata y lo abrimos con doble click para configurar sus propiedades. Asignamos True al atributo HttpGetEnabled para publicar los metadatos del servicio. Volvemos a nuestro servicio para asignarle su comportamiento asociado (que es justo el que acabamos de crear).
Configurar IIS
Para configurar nuestra aplicación en IIS debemos decirle al proyecto que será publicado en ese servidor de aplicaciones. Abrimos las propiedades del proyecto y en la pestaña Web modificamos la configuración para que nuestro servidor sea IIS, en este mismo momento podemos crear el directorio virtual para la aplicación. Podemos hacer las pruebas necesarias para verificar que lo hecho hasta ahora funciona correctamente.
Ahora lo siguiente es hacer un cliente que use nuestro servicio, porque sino ¿para qué lo hemos hecho? ;-)
Pero eso lo veremos en el próximo artículo de esta miniserie sobre WCF.

Puede que mucha de la terminología que se haya usado en este artículo le resulte confusa y desconocida; pero este es sólo un ejemplo para comenzar a entender el proceso de usar WCF donde antes usabamos un simple web service. En próximos artículos ahondaré más al respecto.



No hay comentarios:

Publicar un comentario