En previos artículos se ha dado a conocer la manera de crear un servicio Windows Communication de una manera muy simple. Como recordarás WCF provee de un modelo de programación sólido para la creación de servicios.
Afortunadamente para nosotros, este modelo busca ser lo más sencillo para que tú como ejecutor de la creación del servicio te puedas concentrar más en el cómo resolver el problema y no tanto en la arquitectura de cómo implementar la solución.
Para resolverlo, WCF provee de una estructura que es importante repasar: el ABC de WCF.
Así es, como si regresáramos a nuestros días de primaria el ABC es una parte fundamental para comprender como funciona esto; y en el mundo de WCF el ABC define el qué, el cómo y el dónde de nuestro servicio:
Address. La dirección donde el servicio se encuentra hospedado.
Binding. La manera en la cual los mensajes serán enviados y recibidos.
Contract. La definición de lo que contiene el mensaje.
Este artículo, se lo dedicamos a los Bindings y así conocer el rol que juegan dentro de todo esto.
Los Bindings definen tres aspectos importantes:
- Protocolo de transporte (ej. http, tcp)
- Formato de codificación (ej. Texto plano, binario)
- Otras características. (ej. Requerimientos de seguridad, transacciones, etc.)
De manera más detallada, un binding estará agrupando varios elementos, donde cada elemento es responsable de proveer alguna funcionalidad. Para nuestro beneficio WCF ofrece una cantidad de bindings preconfigurados para resolver escenarios comunes; este es un aspecto que sobresale de WCF puesto que nuestro servicio se podrá exponer de distintas formas sin tener que realizar mucho esfuerzo.
En la siguiente tabla, conoceremos algunos de los bindings más comunes y su uso:
|
Nombre
|
Descripción
|
|
basicHttpBinding
|
Interoperar con ASMX; usa HTTP como transporte y UTF-8 para el texto por defecto
|
|
webHttpBinding
|
Exponer como HTTP Requests, con formatos soportados como JSON o XML
|
|
wsHttpBinding
|
Interoperar con especificaciones WS-*
|
|
wsDualHttpBinding
|
Utiliza lo mismo que el anterior pero para contratos dúplex
|
|
netTcpBinding
|
Utiliza TCP para comunicar, requiere que servicio y cliente sean WCF.
|
|
netNamedPipeBinding
|
Es la opción ideal para comunicación de servicios en un mismo equipo
|
|
netPeerTcpBinding
|
Utiliza TCP pero sobre una red punto a punto
|
|
netMsmqBinding
|
Soporta comunicación asíncrona utilizando MSMQ
|
|
msmqIntegrationBinding
|
Permite comunicación con sistemas existentes utilizando MSMQ
|
Para poner en práctica esto, te invito a realizar un ejemplo para exponer un servicio con múltiples bindings.
Abre Visual Studio y crea un proyecto de tipo WCF Service Library

Al crear el proyecto, se crea una estructura, donde tienes 3 archivos a destacar:
IService1. El contrato
Service1. La implementación
App.config. La configuración
Dale un vistazo al contenido de cada uno de los archivos y ahora abre el contenido del App.config.
Como te darás cuenta por defecto, ya se expone con un binding, el cual es wsHttpBinding y para probarlo ejecuta tu aplicación y comprueba el resultado. Al ejecutar verás cómo se levanta un cliente para probar nuestro servicio:

Prueba con alguna de las funciones expuestas para validar su funcionalidad y ahora vamos a realizar unas modificaciones para exponer nuestro servicio.
El servicio de ejemplo ahora lo vamos a exponer de múltiples formas, para eso habrá que definir tres endpoints con las siguientes características:
Nota: Recuerda el ABC
|
Address
|
Binding
|
Contract
|
|
http://localhost:8000/MultiplesBindingsService
|
wsHttpBinding
|
Comunidad.WCFMultiplesBindings.IService1
|
|
http://localhost:8001/MultiplesBindingsService
|
webHttpBinding
|
Comunidad.WCFMultiplesBindings.IService1
|
|
net.tcp://localhost:8002/MultiplesBindingsService
|
netTcpBinding
|
Comunidad.WCFMultiplesBindings.IService1
|
El contrato sigue siendo el mismo y ahora la configuración de tu servicio quedaría de la siguiente manera:
<system.serviceModel>
<services>
<service name="Comunidad.WCFMultiplesBindings.Service1">
<!-- Service Endpoints -->
<endpoint address ="http://localhost:8000/MultiplesBindingsService" binding="wsHttpBinding" contract="Comunidad.WCFMultiplesBindings.IService1"/>
<endpoint address ="http://localhost:8001/MultiplesBindingsService" binding="webHttpBinding" contract="Comunidad.WCFMultiplesBindings.IService1"/>
<endpoint address ="net.tcp://localhost:8002/MultiplesBindingsService" binding="netTcpBinding" contract="Comunidad.WCFMultiplesBindings.IService1"/>
<endpoint address="http://localhost:8000/MultiplesBindingsService/mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior>
<!-- To avoid disclosing metadata information,
set the value below to false and remove the metadata endpoint above before deployment -->
<serviceMetadata httpGetEnabled="True" httpGetUrl="http://localhost:8000/MultiplesBindingsService"/>
<!-- To receive exception details in faults for debugging purposes,
set the value below to true. Set to false before deployment
to avoid disclosing exception information -->
<serviceDebug includeExceptionDetailInFaults="False" />
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
Ejecuta tu aplicación y confirma que el cliente levanta correctamente y puedes probar su funcionalidad
Como lo notas, ahora el mismo servicio está expuesto de formas distintas y lo único que tuvimos que hacer fue incluir unas líneas en nuestro archivo de configuración.
Ahora, puedes probar creando un cliente y consumir el servicio.
Esperando sea de utilidad, recuerda que el ejercicio lo puedes descargar desde aquí.
Revísalo, ejecútalo y no olvides seguirnos que en próximas entregas conoceremos como poder crear nuestros propios bindings.
Nos encontramos en la próxima.
Posted
11-03-2010 3:40 PM
by
Marcos