Turorial WCF (3 de 5)

Artículos anteriores:
Tutorial WCF (1 de 5)
Tutorial WCF (2 de 5) 


3 – BINDINGS


Nuestro servicio dará una funcionalidad pero el cliente tiene que acceder a él de alguna manera. Lo que tenemos que hacer es configurar de qué manera se va a comunicar el el servicio y dónde estará éste. Los servicios podemos tenerlos accesibles en diferentes lugares (puertos) y usando diferentes mecanismos de comunicación. A cada combinación de lugar/mecanismo le llamaremos endpoint.


Los Bindings especifican los mecanismos de comunicación que usaremos para «hablar» con un endpoint.
La plataforma .NET nos ofrece una serie de bindings «de serie» que podemos configurar y usar. Con estos definiremos como queremos que se codifiquen los datos, la seguridad de las comunicaciones, la compresión, el protocolo a usar, etc.


Nosotros podemos crear nuestros propios bindings si nuestro proyecto usa algún protocolo propio o algún tipo de mecanismo de comunicación diferente a los que nos da el Framework.


Podéis encontrar la lista de bindigns que nos da la Plataforma .NET en el siguiente enlace: http://msdn2.microsoft.com/en-us/library/ms731092.aspx


4 – CONFIGURANDO NUESTRO SERVICIO


Lo primero que vamos a hacer es servir nuestro servicio de WCF creado en el post anterior como un servicio Web a través de SOAP y XML. Para esto necesitamos tener el Internet Information Services instalado.


Primero debemos cambiar la carpeta donde se generan las dlls de nuestro servicio. Por defecto se generan el la carpeta bin/Debug, pero si ponemos el servicio en el IIS, éste va a leer directamente de bin así que debemos cambiar el lugar. Para hacerlo hacemos click con el botón derecho en nuestro proyecto y vamos a propiedades. En el apartado Build, en Output cambiaos el Output path a bin, guardamos y listos.


Ahora debemos crear un fichero de configuración para configurar el servicio y sus endpoints. Como la aplicación va a estar servida por el IIS, o sea, va a ser una aplicación web, la configuración va dentro del archivo Web.config. Lo creamos (si lo creamos con la plantilla borramos todo su interior) y escribimos lo que necesitamos:



<?xml version=»1.0″?>
<configuration>
  <system.serviceModel>
    <services>
      <service name=»BlogWCF.MiServicio»>
        <endpoint address=»»
                  binding=»basicHttpBinding»
                  contract=»BlogWCF.IMiServicio» />
      </service>
    </services>
  </system.serviceModel>
</configuration>

Aquí hemos definido un solo servicio con un solo enpoint, pero podríamos tener varios y dependiendo de a que endpoint se dirigiera el cliente usaría un binding o un servicio diferente. En el atributo name del servicio hemos colocado el espacio de nombres de nuestro servicio seguido del servicio. En el endpoint no hemos colocado ninguna dirección ya que será en el lugar donde lo sirva el IIS. El binding utilizado es el basicHttpBinding (ojo, es case sensitive!); éste nos provee el sistema básico de comunicaciones mediante Web Services. Después le hemos dicho qué contrato implementa este servicio.

Ahora lo único que falta es un ficherito con extensión .svc para que el usuario tenga un punto a donde navegar y el IIS sepa que ésto que está sirviendo es un servicio de WCF y sepa como compilar y generar la información WSDL del contrato cuando el cliente se lo pida. Añadimos un nuevo fichero de texto y lo nombramos Service.svc.



<%@ServiceHost Service=»BlogWCF.MiServicio» %>

Como vemos sigue el patrón de los fichero de ASP.NET, una directiva con <%@, en este caso ServiceHost, que indica que servico tiene que compilar y ejecutar.
Con esto ya podemos poner nuestro servicio en nuestro IIS y navegar por Internet para verlo. Sin muchos detalles: en el IIS creamos un directorio virtual que apunte al directorio raíz donde está en .svc y listos. Accedemos al servicio con nuestro navegador: http://localhost/BlogWCF/Service.svc (mi directorio virtual se llama BlogWCF) y tenemos que ver algo parecido a esto:

wcfnowsdl

Si nos fijamos hay una línea que pone: Metadata publishing for this service is currently disabled. Por seguridad el IIS deshabilita la posibilidad de publicar la metadata. Si queremos verla y que clientes desde fuera puedan acceder a ella para poder ver el WSDL debemos modificar un poco nuestro Web.config. Crearemos un behavior que extenderá la funcionalidad de nuestro servicio:



<?xml version=»1.0″?>
<configuration>
  <system.serviceModel>
    <services>
      <service name=»BlogWCF.MiServicio»
               behaviorConfiguration=»MiBehavior»>
        <endpoint address=»»
                  binding=»basicHttpBinding»
                  contract=»BlogWCF.IMiServicio» />
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior name=»MiBehavior»>
          <serviceMetadata httpGetEnabled=»true»/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>
</configuration>

Si volvemos a cargar la pagina veremos que ahora sí podemos acceder a la metadata que genera a partir del contrato (WSDL), donde se define qué funcionalidades da nuestro servicio, qué tipos de datos usa, y cómo se accede.

wcfwithlinkwsdl

Con esto ya tenemos listo nuestro servicio web.

También podemos hacer que nuestro servicio sea servido por otro programa y con otro protocolo.


Ésto lo veremos en el próximo post: Sirviendo un Servicio de WCF (2ª parte).

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *