Introducción a Windows Communication Foundation PARTE 2
Algunos Conceptos de WCF
Servicio: es un programa que expone sus capacidades a través de una colección de Endpoints y su descripción.
Descripciones del servicio: se publican utilizando WSDL, XSD, WS-Policy y WS-MetaDataExchange.
Cliente: es un programa que intercambia mensajes con uno o más Endpoints y también puede exponer sus propios Endpoints. Un cliente debe conocer la Dirección, el Contrato y el Binding de un servicio para poder comunicarse con el.
Mensaje: representa unidad de intercambio de datos entre un Cliente y un Servicio.
Podemos encontrar los siguientes patrones:
- Simplex: mensajes de una sola vía donde no se espera respuesta alguna.
- Duplex: mensajes de dos vías de modo asíncrono.
- Request-Reply: mensajes de dos vías de modo síncrono, es decir se envía el mensaje y se aguarda por la respuesta.

Patrones de mensajes
Intermediario: la comunicación entre un cliente y un servicio puede pasar a través de otro programa, denominado servicio intermediario, que debería ser desconocido para el cliente. Este servicio no consume mensajes y es simplemente un punto por el que atraviesan los mensajes en su viaje desde el cliente hasta el servicio de destino. Las Tareas útiles que pueden realizar son:
- Gateway: para hacer de puente entre redes.
- Ruteo: permite dirigir un mensaje a uno de varios servicios de destino.
- Firewall: puede prevenir que ciertos mensajes lleguen a un servicio.
- Monitoreo de actividad.

Ejemplo de intermediario
La Estructura de un Servicio

Un servicio se accede a travéz de un Endpoint (Punto de Conexión) que es el medio a través del cual interactúa con su entorno. Esá¡ formado por una dirección, un enlace y un contrato, lo que se llama habitualmente el ABC (Address, Binding, Contract) del servicio.
- Address: es la dirección de red del Endpoint. (URI: http://localhost:8080/CalculadoraService/)
o URI (Unifrom Resource Identifier): es una forma de especificar una la dirección de un recurso, esá¡ formada por un protocolo (Http, net.TCP, net.Pipe, net.msmq) seguido del nombre del host, puerto y path: Protoclo://Host [:Puerto][/path/[.../]]
- Binding: especifica como un servicio se comunica con el entorno. Permite crear un stack de características para el canal de comunicaciones acorde a los requerimientos del servicio (El canal no se abre hasta que el servicio reciba el primer mensaje). Permite definir:
o El medio de transporte (HTTP, TCP, MSMQ, etc)
o La codificación de los datos (texto, MTOM, binario)
o La seguridad requerida (HTTP, SOAP, Windows NTLM/Kerberos, user/pass, etc)
o La confiabilidad de las comunicaciones (sesión)
o El patrón de mensajes (Simplex, Duplex o Request-Reply)
o La interoperabilidad deseada (Basic WS 1° generacion, WS-*, .Net, MSMQ)

Características de un canal de comunicaciones
- Contract: es una colección de operaciones, especifica lo que el Endpoint puede comunicar al entorno. Los tipos de contratos que podemos especificar son:
o Service Contract: es una interfaz que implementa un servicio (Se publica utilizando WSDL). El Operation Contract son los métodos que forman parte de la interfaz, y que podrán ser accedidos por los clientes del servicio.
o Data Contract: define las clases y estructuras complejas que puede retornar o recibir un servicio. Es implícito si el tipo de dato es serializable, es decir el tipo de dato se puede pasar directamente sin declararlo en el contrato. Es explícito en caso contrario y se debe especificar en un data contract (Serializacion/descerializacion) (Se publica utilizando un XML Schema). El Member Contract son los atributos o propiedades del objeto que forma parte de un data contract y podrán ser serializados.
o Message Contract: especifica la estructura, cabecera y cuerpo, del mensaje SOAP. (Message Header y MessageBody). Nos permite definir si un atributo de una clase va viaja en la cabecera o en el cuerpo de un mensaje.
Los tipos de bindings disponibles:
|
Binding
|
Intero-perabilidad
|
Seguridad
(Default)
|
Sesión
|
Transacción
(Default)
|
Duplex
|
Codificación
|
|
BasicHttpBinding
|
Basic Profile 1.1
|
(Ninguno),
Transporte,
Mensaje, Mixto
|
No
|
No
|
n/a
|
Texto, (MTOM)
|
|
WSHttpBinding
|
WS
|
Transporte,
(Mensaje),
Mixto
|
Si
|
(No)
Si
|
n/a
|
Texto, (MTOM)
|
|
WSDualHttpBinding
|
WS
|
(Mensaje),
Ninguno
|
Si
|
(No)
Si
|
Si
|
Texto, (MTOM)
|
|
WSFederationHttpBinding
|
WS - Federation
|
(Mensaje),
Mixto,
Ninguno
|
|
(No)
Si
|
No
|
Texto, (MTOM)
|
|
NetTcpBinding
|
.Net
|
(Transporte),
Mensaje,
Ninguno,Mixto
|
SI
|
(No)
Si
|
Si
|
Binaria
|
|
NetNamedPipeBinding
|
.Net
|
(Transporte),
Mensaje,
Ninguno,Ambos
|
Si
|
(No)
Si
|
Si
|
Binaria
|
|
NetMsmqBinding
|
.Net
|
Ninguno,(Transporte)
|
No
|
(No)
Si
|
No
|
-
|
|
NetPeerTcpBinding
|
Peer
|
Mensaje,
(Transporte),
Ambos
|
No
|
(No)
|
Si
|
-
|
|
MsmqIntegrationBinding
|
MSMQ
|
(Transporte)
|
No
|
(No)
Si
|
n/a
|
-
|