Professional Documents
Culture Documents
Communication
Foundation 4.0
Aroa Solana
Sinopsis
El presente texto presenta al lector las caractersticas de creacin de servicios utilizando Windows Communication Foundation (WCF), parte de .NET Framework 4. Las aplicaciones cliente-servidor han evolucionado y el
hecho de poder acceder a informacin presente en mltiples ubicaciones ha pasado a ser una necesidad para
las nuevas aplicaciones. SOA (Arquitectura Orientada a Servicios) es el principal cimiento de esta tecnologa y
conceptos como Address, Binding y Contract, el ABC de WCF, los aprender el lector a lo largo de los captulos. Con WCF los servicios podrn ser consumidos por aplicaciones .NET y por aplicaciones hechas con otras
tecnologas como J2EE o similares.
Luarna
Windows Communication Foundation 4.0
Aroa Solana Ruiz Alhambra-Eidos
De esta edicin: 2011, Luarna Ediciones, S.L.
www.luarna.com
Madrid, junio de 2011
ISBN: 978-84-15013-10-5
Versin 1.0 (21/06/2011)
Cualquier forma de reproduccin, distribucin, comunicacin pblica o transformacin de esta obra solo puede ser realizada con la
autorizacin de sus titulares, salvo excepcin prevista por la ley. Dirjase a CEDRO (Centro Espaol de Derechos Reprogrficos,
www.cedro.org) si necesita fotocopiar, escanear o hacer copias digitales de algn fragmento de esta obra.
Indice
1.INTRODUCCIN ........................................................................................................................................................................... 14
ARQUITECTURA WCF ....................................................................................................................................................................... 14
CONTRATOS ................................................................................................................................................................................... 15
Datos .............................................................................................................................................................................................. 15
Mensaje.......................................................................................................................................................................................... 15
Servicio ........................................................................................................................................................................................... 15
POLICY Y BINDING ........................................................................................................................................................................... 16
SERVICE RUNTIME ........................................................................................................................................................................... 16
MENSAJES ..................................................................................................................................................................................... 16
ACTIVACIN Y ALOJAMIENTO ............................................................................................................................................................. 17
CARACTERSTICAS DE WCF ................................................................................................................................................................ 17
Transacciones ................................................................................................................................................................................. 17
Alojamiento .................................................................................................................................................................................... 18
RESUMEN ...................................................................................................................................................................................... 18
2.CONCEPTOS DE WCF.................................................................................................................................................................... 21
MENSAJES ..................................................................................................................................................................................... 21
Estructura de un mensaje ................................................................................................................................................................ 21
El sobre SOAP.................................................................................................................................................................................. 22
Cabecera SOAP ............................................................................................................................................................................... 22
Cuerpo SOAP ................................................................................................................................................................................... 22
PROGRAMAS DE MENSAJERA ............................................................................................................................................................. 24
Clientes ........................................................................................................................................................................................... 25
Servicio ........................................................................................................................................................................................... 25
Intermediarios ................................................................................................................................................................................ 26
PATRONES DE MENSAJERA ................................................................................................................................................................ 26
Simple............................................................................................................................................................................................. 26
Dplex ............................................................................................................................................................................................ 27
Peticin-Respuesta .......................................................................................................................................................................... 27
CANALES ....................................................................................................................................................................................... 28
Pila de canales ................................................................................................................................................................................ 28
SEGURIDAD .................................................................................................................................................................................... 29
INTEROPERABILIDAD ......................................................................................................................................................................... 29
TRANSPORTES ................................................................................................................................................................................ 29
SERVICIOS ...................................................................................................................................................................................... 30
EXTREMOS ..................................................................................................................................................................................... 31
DIRECCIONES.................................................................................................................................................................................. 31
ENLACES ....................................................................................................................................................................................... 31
CONTRATOS ................................................................................................................................................................................... 34
Contrato de servicios ....................................................................................................................................................................... 34
Contrato de mensajes ..................................................................................................................................................................... 34
Contrato de datos ........................................................................................................................................................................... 34
COMPORTAMIENTOS ........................................................................................................................................................................ 35
3.MODELO DE PROGRAMACIN DE WCF ....................................................................................................................................... 36
ORIENTADO A SERVICIOS VS ORIENTADO A OBJETOS ................................................................................................................................ 36
MODELO DE SERVICIOS ..................................................................................................................................................................... 37
System.ServiceModel ...................................................................................................................................................................... 37
System.ServiceModel.Channels ....................................................................................................................................................... 38
System.Transactions ....................................................................................................................................................................... 39
SCVUTIL.EXE .................................................................................................................................................................................. 39
Usos Comunes................................................................................................................................................................................. 40
Generacin de cdigo...................................................................................................................................................................... 40
Exportar Metadatos ........................................................................................................................................................................ 41
Serializacin/ Mensaje .................................................................................................................................................................... 42
Avanzada ........................................................................................................................................................................................ 42
Miscelnea ..................................................................................................................................................................................... 43
MTODOS DE PROGRAMACIN DE WCF ............................................................................................................................................... 43
Declarativa ..................................................................................................................................................................................... 43
Explcita .......................................................................................................................................................................................... 44
Pgina 5
Configuracin ................................................................................................................................................................................. 44
NIVELES DE PROGRAMACIN WCF ...................................................................................................................................................... 45
Tipado ............................................................................................................................................................................................ 45
No tipado........................................................................................................................................................................................ 45
Mensajes ........................................................................................................................................................................................ 46
EL PROCESO DE DESARROLLO .............................................................................................................................................................. 46
CREANDO NUESTRO PRIMER SERVICIO WCF ........................................................................................................................................... 46
Cdigo del Servicio .......................................................................................................................................................................... 57
Servicio.svc ..................................................................................................................................................................................... 58
Web.config ..................................................................................................................................................................................... 58
4.DIRECCIONES ............................................................................................................................................................................... 59
DIRECCIONES WCF .......................................................................................................................................................................... 59
TIPOS DE DIRECCIONES ..................................................................................................................................................................... 59
Direccin de Extremo ...................................................................................................................................................................... 59
Direccin Base ................................................................................................................................................................................ 60
Direccin MEX................................................................................................................................................................................. 60
FORMATO DE DIRECCIONES ................................................................................................................................................................ 60
Direccin HTTP ................................................................................................................................................................................ 61
Direccin HTTPS ............................................................................................................................................................................. 61
Direccin TCP .................................................................................................................................................................................. 61
Direccin MSMQ ............................................................................................................................................................................. 62
Direccin de Canalizacin con Nombre ............................................................................................................................................ 62
Direccin IIS .................................................................................................................................................................................... 62
PROGRAMACIN DE DIRECCIONES EN WCF ........................................................................................................................................... 63
La clase EndpointAdress .................................................................................................................................................................. 63
La propiedad de Identidad............................................................................................................................................................... 64
Coleccin de cabeceras ................................................................................................................................................................... 65
PROGRAMACIN DE DIRECCIONES ........................................................................................................................................................ 65
Direccin base................................................................................................................................................................................. 65
Direccin de Extremo ...................................................................................................................................................................... 66
ESPECIFICAR UN FICHERO DE CONFIGURACIN ......................................................................................................................................... 66
ESPECIFICACIN EN CDIGO ............................................................................................................................................................... 67
Direccin relativa ............................................................................................................................................................................ 68
5.ENLACES ...................................................................................................................................................................................... 69
ENTENDIENDO LOS ENLACES WCF ....................................................................................................................................................... 69
ENLACES PREDEFINIDOS .................................................................................................................................................................... 69
BasicHttpBinding ............................................................................................................................................................................ 70
Propiedades BasicHttpBinding ................................................................................................................................................................ 71
WsHttpBinding................................................................................................................................................................................ 72
WSDualHttpBinding ........................................................................................................................................................................ 74
Propiedades WSDualHttpBinding ............................................................................................................................................................ 74
WSFederationHttpBinding ............................................................................................................................................................... 76
Propiedades de WSFederationHttpBinding.............................................................................................................................................. 76
NetTcpBinding ................................................................................................................................................................................ 78
Propiedades WS-ReliableMessaging........................................................................................................................................................ 78
NetNamedPipeBinding .................................................................................................................................................................... 79
Propiedades NetNamedPipeBinding ....................................................................................................................................................... 80
NetMsmqBinding ............................................................................................................................................................................ 81
Propiedades NetMsmqBinding................................................................................................................................................................ 81
NetPeerTcpBinding ......................................................................................................................................................................... 84
Propiedades NetPeerTcpBinding............................................................................................................................................................. 84
MsmqIntegrationBinding ................................................................................................................................................................ 85
Propiedades de MsmqIntegrationBinding ............................................................................................................................................... 85
Pgina 6
Pgina 7
Pgina 8
Auditora....................................................................................................................................................................................... 211
Credenciales......................................................................................................................................................................................... 211
Pgina 9
Pgina 10
Pgina 11
Pgina 12
Pgina 13
1.INTRODUCCIN
Este libro pretende ofrecer al lector los contenidos necesarios, aunque no todos, para poder preparar el examen de certificacin de Microsoft 70-513. Este libro ofrece al lector una inmersin en el mundo de WCF, para
que pueda probar e ir investigando como apoyo en el estudio imprescindible de esta materia, an as hay que
destacar que lo ms importante es la experiencia que se adquiere en el transcurso del estudio, de la creacin
propia de ejemplos, etc.
Despus de esta pequea introduccin en las certificaciones empecemos a raspar en la superficie del profundo
universo que engloba Windows Communication Foundation.
Actualmente las empresas tienen la necesidad de poder interconectar los procesos, las personas y la informacin.
Por ello uno de los problemas ms grandes a los que una empresa ha de hacer frente es el poder integrar estos
componentes IT (aplicaciones, datos y sistemas).
La arquitectura Orientada a Servicios (SOA) proporciona una estrategia general de organizacin de elementos
IT, en definitiva, nos brinda un marco de diseo para la integracin de aplicaciones independientes de manera
que se pueda desde la red acceder a sus funcionalidades, las cuales se ofrecen como servicios. WCF se basa en
esta arquitectura.
Arquitectura WCF
En el corazn de WCF est una arquitectura de capas que soporta una gran variedad de estilos para el desarrollo de aplicaciones distribuidas. La siguiente imagen ilustra la arquitectura de capas de Windows Communication Foundation.
Esta arquitectura en capas, brinda a los desarrolladores un nuevo modelo de programacin orientado a servicios.
Pgina 14
Contratos
Los contratos WCF contienen informacin relativa a lo que un servicio ofrece al cliente y el tipo de informacin que va a poner a disposicin.
Existen tres tipos de contratos: de datos, de mensaje y de servicio.
Datos
Un contrato de datos estipula de manera explcita los datos que se intercambiarn con el servicio. El servicio y
el cliente no necesitan llegar a un acuerdo sobre los tipos, pero si necesitan llegar a un acuerdo sobre los datos
del contrato. Esto incluye los parmetros y el tipo de retorno.
Mensaje
Un contrato de mensaje proporciona un control adicional sobre un contrato de datos, en la medida en la que
controla los mensajes SOAP enviados y recibidos por el servicio. En otras palabras, un contrato de mensaje
permite personalizar el tipo de formato de de los parmetros en los mensajes SOAP.
La mayora de las veces un contrato de datos es suficiente, pero en ocasiones puede que un poco ms de control sea necesario.
Servicio
Un contrato de servicio informa a los clientes, de lo que ofrece el servicio y como comunicase con l. Piense en
ello como una sola declaracin, en la que bsicamente dice aqu estn los tipos de datos de mis mensajes, aqu
es donde estoy ubicado, y aqu estn los protocolos con los que me comunico.
Los contratos son definidos por el CLR por medio de clases o interfaces. stas, al ser utilizadas en los servicios,
son convertidas a un formato comn para que el servicio pueda ser usado por distintas plataformas con total
compatibilidad.
El Service Contract es convertido en un WSDL que obtiene la descripcin de las operaciones ofrecidas por el
servicio (segn lo definido en el Service Contract).
El Data Contract es convertido en un XML Schema que contiene la estructura del objeto enviado o solicitado
por el servicio.
El Message Contract es convertido en un mensaje SOAP.
Ilustracin 2
Pgina 15
Policy y Binding
Los contratos de poltica y enlace (Policy y Binding) especifican informacin importante como la seguridad, el
protocolo y otra informacin, de manera que esto se verifica antes de que empiece con la comunicacin.
Service Runtime
El servicio Runtime es la capa que especifica y administra los comportamientos del servicio que ocurren durante la transferencia de informacin con los clientes.
La siguiente tabla muestra los diferentes comportamientos que son gestionados por la capa del servicio Runtime.
Comportamiento
Capacidad
Error
Metadatos
Instanciacin
Caractersticas
Determina el nmero de mensajes que se procesan.
Especifica que accin se tomar si se produce un error durante el
servicio Runtime.
Controla si los metadatos estn o no expuestos al mundo exterior.
Establece el nmero de instancias de un servicio.
Inspeccin de mensajes
Transacciones
Dispensador
Concurrencia
Determina como cada uno de los servicios, o instancias, manejan hilos. Este comportamiento ayuda a controlar el nmero de hilos que
pueden tener acceso a una determinada instancia de un servicio.
Filtrado de parmetros
Mensajes
La capa de mensajera define qu formatos y pautas de intercambio de datos pueden ser utilizados por el servicio de comunicacin. Las aplicaciones cliente pueden ser desarrolladas para acceder a esta capa y manejar
los detalles de mensajera y trabajar directamente con los mensajes y canales.
La siguiente tabla muestra los canales y componentes que forman parte de la capa de mensajera:
Componentes
Caractersticas
Canal de seguridad
Pgina 16
Codificadores
Canal HTTP
Canal TCP
Canal MSMQ
Canal utilizado por los servicios que interactan con el servicio de colas
de mensajes MSMQ.
Tabla 2
Activacin y Alojamiento
La capa de activacin y alojamiento ofrece diferentes opciones en las que un servicio puede ser iniciado, as
como alojado. Los servicios pueden ser alojados en el contexto de otra aplicacin o pueden ser auto alojados.
La siguiente tabla muestra las opciones de activacin y alojamiento proporcionados por esta capa:
Opciones
Caractersticas
Permite a las aplicaciones WCF que se inicien automticamente cuando se ejecutan en un equipo que tiene activo el servicio de activacin de Windows.
.EXE
WCF permite a los servicios que se ejecuten como archivos ejecutables (.exe)
Servicios de Windows
COM+
En resumen, si el alojamiento se realiza sobre IIS, tenemos la posibilidad de registrar nuestros servicios para
que la activacin de stos se produzca automticamente la primera vez que un cliente accede a ellos. Esto
quiere decir que si un mensaje llega a un servicio que no est activo, ste se activar automticamente.
Caractersticas de WCF
Transacciones
Una transaccin es una unidad de trabajo. Una transaccin se asegura que todo lo que la compone termine con
xito, si algo fallara, todo se deshace, es decir, todo o nada. Por ejemplo, si una transaccin contiene tres tareas
de trabajo para llevar a cabo, y durante la ejecucin de esta transaccin una de las tareas falla, entonces fallan
las tres. El xito de la transaccin slo suceder si todas las tareas que la componen terminan con xito. WCF
incorpora este mismo procesamiento de transacciones en su comunicacin.
Pgina 17
Alojamiento
WCF permite alojar servicios que se han alojado en un conjunto de diferentes entornos, tales como servicios
de Windows NT, Windows Forms, aplicaciones de consola y servicios de activacin de Windows.
El alojamiento de un servicio en IIS aade unos beneficios, como el poder manejar la puesta en marcha y la
parada de un servicio de manera automtica.
Resumen
Windows Communication Foundation es el siguiente paso de Microsoft en la creacin de aplicaciones orientadas a servicios y aplicaciones distribuidas.
Las aplicaciones distribuidas se vuelven cada da ms complejas, y es primordial que nuestros negocios estn
conectados. Esta globalizacin informtica requiere la interaccin y la conectividad entre diferentes plataformas e incontables dispositivos. Windows Communication Foundation fue concebido con el objetivo de simplificar el desarrollo de aplicaciones distribuidas.
Una de sus principales caractersticas es que cuenta con un modelo de programacin unificado. Es la unificacin de numerosas capacidades que antes podamos encontrar en distintas tecnologas. Esto nos libra de tener
que estar utilizando ms de una tecnologa para cumplir satisfactoriamente los requerimientos. De este modo,
los desarrolladores harn una tarea de una nica manera.
Las comunicaciones se enriquecen notablemente, ya que Windows Communication Foundation da la libertad
al desarrollador de utilizar mltiples transportes, distintos tipos de formatos de mensajes y diversos patrones
de mensajes.
La interoperabilidad es el plato fuerte de Windows Communication Foundation, ya que la comunicacin es
totalmente independiente de la plataforma. Los servicios utilizados son sobres de SOAP, cuyo contenido es
nada menos que XML. Windows Communication Foundation est basado en la arquitectura de Web Services
y utiliza los estndares establecidos.
El transporte es otra de sus cualidades fuertes, ya que ste se define con un protocolo neutral, de transporte
neutral y formato neutral. Esto quiere decir que los servicios pueden utilizar tanto HTTP como TCP u otro
mecanismo de transporte. Los desarrolladores tienen la posibilidad de agregar nuevos proveedores de transporte, y esto es indiferente al servicio. Windows Communication Foundation separa el cdigo del transporte, y de esta manera soporta distintos mtodos de comunicacin, sin representar esto una carga de trabajo
extra para el desarrollador.
En la siguiente ilustracin se muestra la estructura del Framework 3.0 donde ya est WCF.
Pgina 18
Aunque en la ilustracin se muestra el Framework 3.0, actualmente la versin ms reciente con la que contamos es el Framework 4.0 que incluye hasta el da de hoy algunas caractersticas como:
Nuevas funcionalidades de los compiladores de C#3.0 y VB.NET 9.0
Soporte para rboles de expansin y mtodos lambda
Mtodos de extensin
rboles de extensin para representar el cdigo de alto nivel en tiempo de ejecucin
Tipos annimos con inferencia de tipo esttico
Language Integrated Query (LINQ) contra diferentes orgenes.
Los cuatro componentes nuevos que se observan en la ilustracin son:
-
Windows Presentation Foundation (WPF) (Avalon). Nuevo subsistema de interfaces de usuario basado
en XML, grficos vectoriales que hacen uso de grficos 3D y tecnologas Direct3D.
Windows Communication Foundation (WCF) (ndigo). Sistema de mensajera orientado a objetos que
permite a las aplicaciones interoperar de manera local o remota de la misma forma que los servicios
Web.
Windows Workflow Foundation (WF). Permite construir flujos de trabajo para automatizar tareas y
transacciones.
Windows CradSpace (InfoCard). Componente software que almacena identidades digitales de personas y ofrece la posibilidad de elegir una identidad para ejecutar aplicaciones.
Por ltimo, vamos a exponer un ejemplo, para ver qu tipos de problemas puede resolver WCF.
Una compaa de alquiler de coches decide crear una nueva aplicacin para reservar los coches. Los creadores
de esta aplicacin de reserva de coches de alquiler saben que la lgica empresarial que implementa debe ser
accesible por otro software que se ejecute dentro y fuera de la compaa. De acuerdo con, esto, deciden integrarlo en un sitio orientado a servicios, con la lgica de la aplicacin expuesta a otro software a travs de un
conjunto bien determinado de servicios. Para implementar estos servicios y as comunicar con otro software, la
nueva aplicacin, utilizar WCF.
Pgina 19
Pgina 20
2.CONCEPTOS DE WCF
En ste captulo nos centraremos en los conceptos fundamentales de Windows Communication Foundation.n
el captulo anterior ya empezamos hablando de la mensajera, que es la capa encargada de definir los formatos
de intercambio de datos y que modelos pueden utilizarse en la comunicacin.
Tambin hablamos de servicio Runtime, capa encargada de especificar los comportamientos de los servicios o
extremos de comunicacin.
De manera que aqu, haremos un examen ms detallado de estos componentes, antes de seguir profundizando
en el mundo WCF y empezar a trabajar con l.
Vamos a ver ms en profundidad los siguientes conceptos:
Mensajes
Canales
Servicios
Comportamientos
Mensajes
En su definicin ms sencilla, podramos decir que un mensaje no es ms que un paquete de datos que contiene varias piezas de informacin importante que se est llevando desde un origen hasta un destino.
Las aplicaciones creadas usando WCF se comunican a travs de mensajes que se envan desde un origen hasta
un destino. Todos los mensajes son mensajes SOAP, en formato XML como sobres SOAP. El W3C define un
mensaje como La unidad bsica de comunicacin entre los nodos SOAP.
En el caso de WCF, estos nodos SOAP son servicios y extremos de comunicacin, que envan estos mensajes
SOAP de un lugar a otro con el fin del intercambio de informacin.
A continuacin vamos a analizar la estructura de un mensaje, los diferentes programas de mensajera y los
diferentes patrones que puede utilizar un mensaje para el intercambio de informacin.
Estructura de un mensaje
Como hemos comentado anteriormente, WCF utiliza nicamente los mensajes para el intercambio de datos, o
de informacin, de un punto a otro. Estos mensajes son poco ms que un paquete de datos que debe ajustarse
a un formato especfico.
En la siguiente ilustracin se muestra la estructura bsica de un mensaje.
Sobre SOAP
Encabezado SOAP
Cuerpo SOAP
Pgina 21
Como se puede observar en la ilustracin, existen tres partes fundamentales en la composicin de un mensaje
SOAP.
El sobre SOAP
El encabezado SOAP
El cuerpo SOAP
El sobre SOAP
El componente exterior de un mensaje SOAP es la envoltura o sobre SOAP, aunque extremadamente importante, no es ms que el contenedor para las dos piezas ms importantes de un mensaje SOAP, el encabezado y
el cuerpo.
Un sobre SOAP contiene varias partes de informacin clave en forma de elementos. Entre stas se incluyen las
siguientes:
El nombre del sobre
El espacio de nombres
Un elemento opcional <header>
Un elemento necesario <body>
El espacio de nombres namespace debe empezar por http://www.w3.org/2003/05/soap-envelope
El siguiente fragmento de cdigo muestra la definicin bsica necesaria para la creacin de un mensaje SOAP.
<env:Envelope xmlns:s=http://www.w3.org/2003/05/soap-envelope
xmlns:a=http://schema.xmlsoap.org/ws/2004/08/addressing>
...
</env:Envelope>
Como se observa en el anterior fragmento de cdigo, contiene el nombre del sobre y el espacio de nombres. El
nombre viene dado como env: Envelope.
Cabecera SOAP
La cabecera SOAP es un conjunto de cero o ms bloques de cabecera. Es posible que un mensaje SOAP no contenga cabeceras, ya que es un elemento opcional, pero si incluimos una cabecera SOAP, sta debe ser el primer
elemento hijo que contenga el sobre, en el rbol xml.
La cabecera SOAP contiene informacin importante acerca de las cosas que pueden no estar relacionadas de
manera directa con el mensaje, adems de ser un lugar magnfico para poner toda aquella informacin opcional del mensaje.
El siguiente fragmento de cdigo muestra un claro ejemplo de ello:
<env:Envelope xmlns:s=http://www.w3.org/2003/05/soap-envelope
xmlns:a=http://schema.xmlsoap.org/ws/2004/08/addressing>
<env:Header>
</env:Header>
</env:Envelope>
El elemento cabecera debe contener un nombre de encabezado y el espacio de nombres http://www.w3.org/2003/05/soap-envelope si an no ha sido especificado en el sobre.
Cuerpo SOAP
El cuerpo de un mensaje SOAP es una coleccin de objetos de datos para ser utilizados con un objetivo especfico. Al igual que la cabecera SOAP, un mensaje puede contener cero o ms cuerpos.
Pgina 22
El cuerpo de un mensaje, es simplemente un elemento hijo del sobre en un rbol xml, que contiene toda la informacin necesaria para la comunicacin con el receptor.
Si en el fragmento anterior de cdigo aadimos el cdigo necesario se muestra un claro ejemplo de ello:
<env:Envelope xmlns:s=http://www.w3.org/2003/05/soap-envelope
xmlns:a=http://schema.xmlsoap.org/ws/2004/08/addressing>
<env:Header>
</env:Header>
<env:Body>
</env:Body>
</env:Envelope>
Cdigo fuente 1
De esta manera nuestro mensaje SOAP contiene nicamente una cabecera y un cuerpo SOAP.
Sobre SOAP
Encabezado SOAP
Cabecera de bloque: Orden
Cabecera de bloque: Comprador
Cuerpo SOAP
Sub-elemento: Precio
Sub-elemento: Cantidad
Sub-elemento: modelo
La representacin XML de SOAP para este mensaje pude tener el siguiente aspecto:
<env:Envelope xmlns:s=http://www.w3.org/2003/05/soap-envelope
xmlns:a=http://schemas.mxlsoap.org/ws/2004/08/sddressing>
<env:Header>
<o:orden xmlns:o=http://www.Ejemplo.com/orden env:mustUnderstand=true>
<o:ordenreferencia>591aef96-0c0d-4534-a1d2-b910b0b6</o:ordenreferencia>
<o:ordenfecha>05/15/2010</o:ordenfecha>
</o:orden>
<p:Comprador xmlns:p=http://www.Ejemplo.com/comprador
env:mustUnderstand=true>
<p:nombre>Aroa Solana</p:nombre>
<p:numerotarjeta>1234-5678-9012-3456</p:numerotarjeta>
</p:Comprador>
</env:Header>
<env:Body>
<c:precio xmlns:c=http://www.Ejemplo.com/LibroPrecios>
<c:coste>
<c:precioalpormenor>49.99</c:precioalpormenor>
<c:precioalpormayor>39.99</c:precioalpormayor>
</c:coste>
</c:precio>
<q:Cantidad xmlns:q=http://www.Ejemplo.com/Cantidad>
<q:unidades>1</q:unidades>
</q:Cantidad>
</env:Body>
</env:Envelope>
Cdigo fuente 2
Pgina 23
Este mensaje SOAP contiene dos elementos que son especficos del sobre de un mensaje. Uno de estos elementos es opcional, la cabecera, y el otro que es necesario, el cuerpo del mensaje.
Cualquier elemento contenido dentro de la cabecera, se le denomina bloque de cabecera, que proporcionan
un agrupamiento lgico de datos. En el ejemplo, los dos bloques de cabecera, tanto el bloque para la orden
como para el comprador proporcionan informacin, aunque no necesaria, que puede ser til para el tratamiento de los elementos del cuerpo del mensaje.
Si seguimos mirando el ejemplo, vemos como estos bloques de cabecera contienen la informacin relativa al
nombre del comprador y el nmero de referencia.
Ahora, la pregunta ms importante sera: Qu tipo de informacin va en el bloque de cabecera y que informacin va
en el cuerpo?, esta responsabilidad recae directamente sobre nosotros y se decide en tiempo de diseo.
Cualquier informacin que se intercambia cuando el mensaje llega al destino va en el cuerpo del mensaje. En
el ejemplo, se incluyen dos tipos de informacin, el precio y la cantidad de ejemplares.
Ahora dependiendo de cmo el cliente y el servicio hayan sido codificados, el cliente puede o no esperar una
respuesta, al igual que el servicio puede o no enviar una respuesta. Si el cliente no espera una respuesta y el
servicio no enva ninguna respuesta, entonces toda la operacin se ha completado con xito. Pero si por el contrario queremos que exista una conformacin, de manera que el cliente espera una respuesta por parte del servicio y ste la enve, entonces quedara algo como esto:
<env:Envelope xmlns:s=http://www.w3.org/2003/05/soap-envelope
xmlns:a=http://schemas.mxlsoap.org/ws/2004/08/sddressing>
<env:Header>
<o:orden xmlns:o=http://www.Ejemplo.com/orden env:mustUnderstand=true>
<o:ordenreferencia>591aef96-0c0d-4534-a1d2-b910b0b6</o:ordenreferencia>
<o:ordenfecha>05/15/2010</o:ordenfecha>
</o:orden>
<p:Comprador xmlns:p=http://www.Ejemplo.com/comprador
env:mustUnderstand=true>
<p:nombre>Aroa Solana</p:nombre>
<p:numerotarjeta>1234-5678-9012-3456</p:numerotarjeta>
</p:Comprador>
</env:Header>
<env:Body>
<transporteInfo xmlns==http://www.Ejemplo.com/>
<Estado>xito</Estado>
<DiaEnvio>31/12/08</DiaEnvio>
<DiaLlegada>05/01/09</DiaLlegada>
</transporteInfo>
</env:Body>
</env:Envelope>
Cdigo fuente 3
Cuando el cliente recibe la respuesta, sabe que la orden fue realizada con xito. Aunque sera necesaria ms
informacin en un ejemplo real de pedidos de cualquier tipo, para ste ejemplo queda claro la manera en la
que hemos de colocar la informacin.
Programas de Mensajera
En WCF, los diferentes tipos de aplicaciones pueden enviar y recibir mensajes.
Se podran clasificar como sigue:
Clientes
Servicios
Intermediarios.
Pgina 24
Lo ms importante es entender que cada una de estas aplicaciones es muy singular de diferentes maneras,
nosotros como programadores, programamos los clientes y los servicios, pero no los intermediarios, por lo
tanto, debemos de ser conscientes que los roles de cliente y servicio disponen de funcionalidades diferentes.
Cmo es eso? Bueno, pensemos en lo que un cliente hace respecto a lo que un servicio proporciona. Un servicio nunca inicia una comunicacin, podr responder a solicitudes, pero nunca iniciar el flujo de la comunicacin. Por lo que el rol del cliente, sin duda alguna ser el de iniciar las conversaciones, es decir, el flujo de la
comunicacin y enviar el mensaje inicial.
A continuacin vamos a analizar un poco ms en profundidad cada uno de estos programas de mensajera.
Clientes
Despus de todo lo que hemos comentado, deberamos tener ms o menos una idea clara de lo que es un cliente. Pero por si acaso, vamos a profundizar un poquito ms sobre este tema.
Las aplicaciones utilizan los objetos cliente de WCF para poder invocar las operaciones de servicio. Es decir, es
la parte encargada de iniciar el flujo de comunicaciones con un mensaje inicial y espera respuestas por parte
del otro extremo de la comunicacin.
Como se observa en este ejemplo, el cliente es el que inicia la comunicacin a travs del envo de un mensaje
inicial al servicio, aunque ahora el cliente tambin puede recibir alguna respuesta por parte del servicio.
Servicio
Con lo que llevamos visto hasta ahora, podras definir lo que es un servicio?, bueno, te echar una mano.
Podramos decir que un servicio es un programa que recibe mensajes y realiza las acciones necesarias segn el
contenido del mensaje, dicho de otra forma, los servicios simplemente responden a los mensajes entrantes.
La recepcin de un mensaje implica la ejecucin de un cdigo, con otras palabras, que realice una determinada
accin. Estas acciones o comportamientos pueden ser diferentes y van desde la lectura/escritura en una base
de datos hasta la realizacin de operaciones de entrada/salida de algn fichero, incluso la realizacin de operaciones de mensajera como respuesta al cliente o el envo de un mensaje a otro servicio.
Una de las cosas importantes que hay que destacar acerca de los servicios que sirven a mltiples clientes, es
que stos son completamente capaces de mantener el estado de cada sesin y mantener totalmente aisladas
cada una de las diferentes sesiones que mantengan. Dos clientes pueden llamar al mismo servicio al mismo
Pgina 25
tiempo, y que ste sea capaz de mantener el estado de la sesin para cada cliente de modo que las operaciones
de un cliente no intervengan o intercedan en las operaciones de los dems clientes.
Hay que destacar que un servicio puede actuar tambin como cliente y enviar mensajes a otros servicios en
respuesta a un mensaje, aunque hay que recordar que un servicio nunca puede iniciar la comunicacin, lo que
ocurre es que reacciona ante un mensaje y enva un mensaje a otro servicio. Por lo que cuando un servicio est
enviando un mensaje a otro, se podra decir que toma el rol de cliente.
Intermediarios
Para terminar con el tema de programas de mensajera, nos queda un ltimo concepto, los intermediarios.
Un intermediario no es un servicio en una cadena de servicios, como en el ejemplo anterior, donde un servicio
actuaba tambin como cliente. De hecho, tanto el cliente como el servicio son desconocedores de la existencia
de intermediario alguno.
El intermediario, sin embargo, se establece entre el cliente y el servicio. De hecho no es necesario que un intermediario realice ninguna accin a travs del mensaje, podra nicamente observar el contenido del mensaje
aunque se haya diseado nicamente para que lo lea el servicio destino.
Bien, hasta ahora hemos echado un vistazo a la arquitectura de los mensajes y los diferentes tipos de programas de mensajera, ahora nos centraremos en los diferentes patrones de mensajera.
Patrones de Mensajera
Los patrones de mensajera bsicamente describen o establecen la manera en que se intercambia un mensaje
entre dos extremos.
Cuando un programa enva un mensaje, este debe cumplir con lo que se haya especificado en el patrn correspondiente para que el programa destino, es decir, aquel que recibe el mensaje sea capaz de entenderlo.
Hay tres modelos bsicos de mensajera que las aplicaciones pueden usar para intercambiar mensajes. Estos
patrones son los siguientes:
Simple
Dplex
Peticin-Respuesta
Simple
Con una operacin simple (unidireccional), solo se transmite un mensaje. El receptor no enva un mensaje de
respuesta, ni el remitente lo espera.
Cundo debemos utilizar el patrn de mensajera simple? En principio, deberamos utilizar este patrn en las
siguientes situaciones:
Pgina 26
Cuando el cliente debe llamar a las operaciones y no est afectado por el resultado de la operacin.
Cuando se usen las clases NetMsmqBinding o MsmqIntegrationBinding. (Para el uso de enlaces en cola
para la comunicacin entre equipos y enlaces que enven y reciban mensajes desde aplicaciones MSMQ
existentes que utilicen COM, API nativas de C++ o tipos definidos en el espacio de nombres System.Messaging)
En este escenario, el cliente inicia la comunicacin y enva un mensaje al servicio. El servicio consume el mensaje y realiza alguna accin, pero no comunica con el cliente. Cuando se utiliza este patrn de mensajera, el
cliente una vez que enva el mensaje, no espera ninguna respuesta, por ello tambin olvida que ha enviado
ningn mensaje.
Dplex
Si el cliente quiere una respuesta entonces utilizamos el patrn dplex de mensajera. Este modelo permite a
ambas aplicaciones una comunicacin abierta y el intercambio de informacin en ambos sentidos de manera
independiente.
Un fax sera un claro ejemplo de comunicacin dplex. Al enviar un fax a travs de la lnea telefnica, se establece una conexin e inicia una comunicacin de ida y otra de vuelta, enviando la informacin como una tasa
de baudios y recibiendo el estado.
Este envo de fax, enva el documento escaneado a la recepcin del otro fax y una vez que lo recibe le enva al
fax emisor la informacin de estado correspondiente.
El concepto de este patrn de mensajera es que ni la aplicacin emisora ni la aplicacin receptora esperan una
respuesta por parte de la otra aplicacin.
Peticin-Respuesta
A diferencia de la mensajera dplex, el modelo peticin-respuesta no permite la comunicacin bidireccional
de manera independiente. En este modelo, el cliente enva una respuesta y luego espera a la contestacin. El
servicio no comunica nada hasta que no recibe un mensaje.
Pgina 27
Un ejemplo de uso de este patrn sera cuando estamos navegando por la web. Cuando nosotros intentamos
acceder a la pgina http://Alhambra-Eidos.es nuestro navegador enva informacin a la URL, que solicita la
informacin de este sitio web. Sitio web que enva de vuelta la informacin solicitada.
Canales
Ahora hablaremos de los canales ya que estos desempean un papel central en la entrega de mensajes. Vamos
a ver este tema por varias razones, una de ellas porque a travs de ellos es por donde se hace efectivo el intercambio de mensajes. Un mensaje no puede ser enviado sin la creacin de un canal a travs del cual enviarlo.
Un canal, como se mencion, es el medio a travs del cual se intercambian mensajes. El canal es creado por el
cliente que especifique la direccin del servicio y el tipo de canal. Una vez que esta informacin se establece, el
canal ya est creado y abierto.
Ilustracin 13. Pasos que hay que tomar para crear un canal y enviar un mensaje
Los pasos a seguir para crear un canal y enviar un mensaje son los siguientes:
El cliente establece un canal para el servicio
El servicio acepta la peticin del cliente para abrir un canal
El cliente enva el mensaje a travs del canal
El servicio enva una respuesta al cliente a travs del canal
Hay que tener en cuenta que para que esto funcione el servicio siempre tiene que estar a la escucha de peticiones. Por ejemplo, el servicio podra estar a la escucha en http://PeticionServer/PeticionAceptada para peticiones. Esta es la direccin que el cliente va a utilizar para establecer un canal y enviar mensajes posteriores.
Asimismo, es responsabilidad del cliente disponer el cierre del canal una vez que se ha hecho uso de l y se
termine la comunicacin.
Pila de canales
Si volvemos a recodar lo que decamos en la introduccin, cuando hablbamos acerca de la Arquitectura
orientacin a servicios, uno de los grandes pilares de SOA es la interoperabilidad. Por encima de todo, es a
Pgina 28
travs de la pila de canales donde obtenemos las caractersticas adicionales que un mensaje necesita, tales como la seguridad y el enlace.
As que, Qu es una pila de canales? Pensemos en un canal como un pipe o un tubo. Cuando se enva un
mensaje desde el emisor hasta el receptor, el mensaje es enviado a travs del canal tubo. Ahora imaginemos
pegar una serie de tubos todos juntos, cada uno de estos realiza una funcin especfica que necesita el mensaje. Ahora tenemos una pila de canales.
Seguridad
Hay dos niveles de seguridad disponibles: la seguridad en el transporte y la seguridad en el mensaje. La seguridad en el transporte puede ser ofrecida por varios protocolos incluidos el HTTPS. La seguridad de los mensajes SOAP ofrecen una lista de funcionalidades, incluyendo la autenticacin, la integridad y la confidencialidad del mensaje y la auditora.
Interoperabilidad
Hemos hablado de la importancia de la interoperabilidad, y el rol que juega WCF en esto, es ms recalcamos la
importancia de poder comunicar con otras plataformas con una arquitectura orientada a servicios y de manera
distribuida.
Mediante la combinacin de diferentes componentes podemos construir un canal que comunique y opere con
otras plataformas sin problemas. Tenemos que tener en cuenta con que plataformas queremos interactuar.
Tenemos varias para elegir, entre las que se incluyen la interoperabilidad de MSMQ, .NET.
La interoperabilidad de MSMQ permite a nuestra aplicacin WCF comunicarse con nuestra instalacin de
MSMQ. La interoperabilidad de .NET nos permite comunicarnos con plataformas .NET en ambos extremos
del canal de comunicacin.
Los patrones de mensajera de los que ya hemos hablado, aunque brevemente, vimos como crear nuestro modelo de canal de menajes dependiendo de los patrones que tengamos disponibles. Ahora bien, tenemos que
tener en cuenta que cuando entra en juego la interoperabilidad, necesitamos saber el tipo de patrones de mensajera existentes en otras plataformas. Por ejemplo, estamos diseando nuestra aplicacin, con un patrn de
mensajera concreto, pero resulta que la plataforma con la que queremos interactuar no soporta dicho patrn,
sin ir ms lejos, MSMQ no realiza comunicaciones utilizando el patrn Peticin-Respuesta que tanto est de
moda.
Transportes
Windows Communication Foundation soporta cuatros transportes diferentes: HTTP, TCP, MSMQ, y Canalizaciones con nombre. Estos transportes son el medio en el que la comunicacin se lleva a cabo en un canal.
Algunos de estos transportes ya incorporan seguridad, otros no, por ejemplo HTTP tiene HTTPS. El transporte
HTTP es til cuando el estado de conexin no es necesario que se mantenga, como un navegador web cliente
comunicndose con un servidor web.
TCP es til cuando cobra importancia que nuestra comunicacin est orientada a la conexin. En este escenario, un periodo de sesiones de comunicacin entre los participantes se crea antes del intercambio de datos. Si
todos los participantes estn usando WCF, entonces los enlaces o las canalizaciones con nombre funcionarn
mejor. El transporte TCP en WCF est diseado especficamente para el escenario en el que ambos participantes utilicen WCF. Las canalizaciones con nombre son tiles entre procesos en una misma mquina. Puede ser
utilizado con protocolo simple (en un sentido) o con protocolo dplex entre procesos de una misma mquina.
Pgina 29
ste transporte debe ser utilizado cuando la comunicacin desde otra mquina se ha de evitar y la comunicacin entre aplicaciones WCF en la misma mquina se requiere.
El transporte MSMQ puede utilizarse cuando la entrega fiable de mensajes es obligatoria.
Como hemos de seleccionar el transporte adecuado, para ello tenemos que tener en cuenta el entorno de destino y las plataformas que podramos encontrarnos, sobre todo si nuestro canal cruza fronteras (un dominio
lmite, una frontera geogrfica, etc.).
Servicios
Windows Communication Foundation se compone de servicios y extremos que se comunican con los clientes,
independientemente de la plataforma. Sin embargo, como hemos visto, Windows Communication Foundation
ofrece la interoperabilidad con otras plataformas y adems permitiendo una extensin del mismo en muchas
reas.
Un servicio de WCF se compone de una descripcin y una coleccin de extremos, como se muestra en la siguiente ilustracin.
La descripcin de un servicio es bsicamente que funcionalidad proporciona el servicio y como puede ser accedido.
Desde fuera, un servicio contiene la descripcin del mismo y uno o ms extremos para comunicarse. Sin embargo, con un mayor detalle, podramos decir que tambin se compone de enlaces, de contratos de servicios y
el cdigo para implementar el servicio.
En la ilustracin anterior cada extremo tiene un enlace asociado, un contrato de servicio y su implementacin.
Aunque este ejemplo es muy simple, es muy posible que un servicio tenga varios extremos, mltiples contratos de servicios y mltiples enlaces. Cada extremo tiene una direccin nica que le distingue de los dems
Pgina 30
extremos para el mismo servicio. Por ello, la unin de cada servicio tambin ha de ser nico. Sin embargo los
contratos de servicio pueden ser compartidos entre los extremos.
Nos queda por ltimo ver una cosa, que consiste en explicar lo que ocurre cuando se ejecuta un servicio. Cmo
el servicio recibe un mensaje, se lleva a cabo la ejecucin del servicio, en qu momento del tiempo de ejecucin se crea la descripcin del servicio y su implementacin? Como vienen los mensajes?, lo primero que sucede es que se crea una instancia de la clase ServiceDescription.
El runtime tambin supervisa la entrega del mensaje. Por encima de todo esto est el ServiceHost. El ServiceHost es el responsable de proporcionar una serie de extremos, as como poner a disposicin el servicio de
comportamientos.
En cualquier punto un servicio puede encontrarse en uno de estos seis estados:
Creado
Apertura
Abierto
Cerrando
Cerrado
Predeterminado
Los extremos se han mencionado con relativa importancia en este tema, aunque todava nos queda bastante
por ver. Ahora sera un buen momento para empezar a profundizar en el tema.
Extremos
Piense en un servicio como en una coleccin de uno o ms extremos. Un servicio ha de tener al menos un extremo, de lo contrario, Qu har para poder comunicarse? Un extremo es el componente de un servicio que se
encarga de que ste pueda comunicarse con el cliente y poder proporcionarle las funcionalidades del servicio.
Por ejemplo, un extremo podra tener una direccin http://OrderServer/Order que utilice como enlace en el
transporte HTTP y sin seguridad. El contrato de servicio implementa la interfaz de servicio.
Destacar que en temas posteriores se tratar con mayor profundidad, el funcionamiento de los servicios, las
relaciones entre los extremos y sus correspondientes direcciones, enlaces, y los contratos.
Direcciones
Ms o menos tenemos una idea clara acerca de los extremos, y que estos estn dirigidos por sus direcciones.
Sin embargo, no hay que cometer el error de pensar que todos los servicios se alojan en IIS o que todos ellos
tienen una direccin http://..., porque no es correcto.
Varios factores determinan el formato de una direccin, como el trasporte utilizado y si se aloja o no el servicio
con IIS. Es perfectamente posible alojar un servicio utilizando TCP o MSMQ. Por ejemplo, si utilizamos un
servicio que est utilizando TCP, el prefijo sera net.tcp y la direccin sera lago como: net.tcp://localhost/Libro.
Enlaces
Los enlaces son lo que definen como un extremo se comunica con el mundo exterior. Cada extremo ha de tener
un enlace. El enlace, que es simplemente un conjunto de propiedades, define ciertos aspectos tales como los
patrones de transporte, los patrones de seguridad, y los patrones de mensajera. Un enlace al menos ha de especificar una cosa, el transporte.
Pgina 31