Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Communication Foundation)
En esta primera parte del Tutorial, veremos conceptos básicos pero importantes antes de
comenzar a desarrollar nuestra primera aplicación con WCF. En este post no veremos código,
pero sentaremos las bases con conceptos importantes antes de comenzar con WCF.
Definición:
WCF es un modelo de programación para el desarrollo de aplicaciones con arquitectura
orientada a servicios (SOA). Aplicaciones distribuidas basadas en la comunicación mediante
mensajes.
Principales Características
Address
La address (dirección), especifica el lugar o donde se encuentra el servicio. Especifica la ruta
donde un mensaje será enviado. Todos los servicios son instalados con una dirección
especifica.
Una address es normalmente especificada como una URL, donde la primer parte especifica el
mecanismo de transporte y la segunda parte determina el lugar donde se encuentra el servicio.
Ejemplo:
http://www.ejemplowcf.com/miServicioWCF/EjemploServicio.svc
El ejemplo anterior utiliza HTTP como protocolo de transporte, esta localizado en el servidor,
www.ejemplowcf.com, y la ruta única al servicio que es miServicioWCF/EjemploServicio.svc
Binding
Bindings son usados para especificar los detalles del transporte, encoding y protocolo
requeridos por los clientes y servicios para comunicarse unos con otros. Los bindings en WCF
son usados para la representación de un endpoint. Y un endpoint es un lugar donde los clientes
pueden comunicarse con el servicio de WCF. La forma fácil de que un cliente se comunique
con el servicio es usar el mismo binding que el servicio usa.
Un binding esta compuesto por una colección de elementos. Cada elemento describe algunos
aspectos de como el servicio se comunicará con el cliente. Un binding debe al menos incluir un
elemento de transporte, un message-encoding (este es provisto por el elemento transporte por
defecto), y por último una o varias definiciones del elemento de protocolo.
Algunos ejemplos de bindings en WCF son: BasicHttpBinding, WSHttpBinding, etc. Cada uno
de estos bindings tiene predefinidos elementos requeridos para una tarea en especial, y están
prontos para ser usados en su proyecto. Por ejemplo BasicHttpBinding usa el protocolo HTTP
como transporte para enviar mensaje SOAP 1.1 y tiene atributos y elementos como
receiveTimeout, sendTimeout, maxMessageSize, etc. Puede usar la configuración por defecto
de atributos y elementos de BasicHttpBinding o puede sobrescribirlos dependiendo de su
necesidad.
Contract
Un contract es un conjunto de especificaciones que define la interfaz de un servicio WCF. Un
servicio WCF se comunica con otras aplicaciones de acuerdo a su contrato. Hay muchos tipos
de contractos en WCF, tales como Service contract, operation contract, data contract, message
contract y fault contract.
Endpoint
Los mensajes son enviados entre endpoints. Y los endpoints son el lugar donde los mensajes
son enviados y recibidos o ambos, y tienen toda la información requerida para el intercambio
de mensajes. Un servicio puede exponer uno o mas endpoints. Cuando necesitamos conectarnos
al servicio, la aplicación cliente genera un endpoint que es compatible con el endpoint del
servicio.
Un servicio de WCF tiene un binding, un address y un service contract, esto es conocido como
el ABC de Windows Communication Foundation.
Behavior
Un behavior es un tipo de configuración para extender la funcionalidad de un componente de
WCF. Tenemos muchos tipos de bahaviors en WCF, por ejemplo un service behavior, binding
behavior, contract behavior, etc. Los behaviors son configurados en el archivo de configuración
de WCF.
Hosting
Un servicio WCF es un componente que puede ser llamado por otras aplicaciones. Por esto, el
servicio debe ser alojado en un ambiente para ser usado por otras aplicaciones. El ambiente
que aloja nuestro servicio WCF, es una aplicaci’on que maneja y controla el tiempo de vida de
nuestro servicio.
Channels (Canales)
Hemos visto previamente que un servicio WCF debe ser alojando en algún ambiente (puede ser
una aplicación o un server). La aplicación cliente tiene que especificar los bindings necesarios
para conectarse al servicio WCF. Ahora los elementos del binding, son interfaces y deben ser
implementados en clases concretas. Esta implementación de un elemento del binding es lo que
llamamos channel.(canal). Un elemento del binding representa una configuración y el channel
es la implementación asociada con esa configuración. En resumen, tenemos un channel por
cada elemento del binding.
Metadata
La metadata de un servicio describe las características de un servicio a una entidad externa para
poder comunicarse con el servicio. Para explicarlo un poquito más, la metadata puede ser
consumida usando la utilidad de SvcUtil.exe el cual genera una clase proxy y la configuración
que la aplicación cliente puede usar para interactuar con el servicio.
La metadata que expone el servicio incluye el esquema del documento XML que define el data
contract del servicio y los documentos WSDL que describen los métodos del servicio.
Bueno hasta aquí la primer parte de este tutorial, fue un poquito largo pero fue necesario para
explicar conceptos base que son importantes a la hora de empezar con el desarrollo de un
servicio WCF. En el próximo post, comenzaremos a codificar y veremos como desarrollar
nuestro primer servicio en WCF. Hasta la próxima.
Luego de la primera parte de este tutorial, en la cual vimos los conceptos básicos pero
necesarios acerca de WCF, veremos aquí como crear un servicio WCF simple, aplicando lo
visto anteriormente.
7. En la seccion del Solution Explorer, debemos hacer click en el botón derecho sobre la
solución y seleccionar Add -> New Project… desde el menu contextual. La imagen aquí debajo
muestra el menu contextual para agregar un nuevo proyecto.
.8. El formulario de Add New Project debería abrirse. En la parte izquierda de este formulario,
seleccionar Installed -> Visual C#, y en la seccion media del formulario seleccionar Class
Library.
9. En la parte inferior del formulario de Add New Project, digitar PrimerServicioWCF en el
campo nombre. Dejar el directorio seleccionado por defecto en la opcion Location. No es
necesario agregar MiPrimerServicioWCF en la opcion Location porque Visual Studio crea este
directorio de forma automatica.
Cuando vemos los templates que nos ofrece Visual Studio podemos haber notado que existe
uno que es WCF Service Application. Pero no lo utilizaremos en principio, así podremos crear
desde 0 todas las cosas necesarias para nuestro servicio. Es una buena forma de entender com
funciona esta tecnología.
Nuestro entorno de desarrollo debería parecerse mucho a la imagen que les dejo debajo.
Hasta aquí creamos una nueva solución y un nuevo proyecto. En este proyecto crearemos
nuestro primer servicio WCF. La última cosa que nos faltaría antes de empezar a crear nuestro
servicio sería agregar la referencia a la librería System.ServiceModel. Para ello seguiremos
estos pasos:
Bien hasta aquí hemos creado una solución con un proyecto que permitió crear un servicio
WCF. En la próximo parte de este tutorial veremos como alojar (host) nuestro servicio en algún
ambiente para de esa forma quede pronto para poder ser consumido por una aplicación cliente.
Cualquier consulta o pregunta pueden dejarla aquí debajo. Debajo aquí les dejo el código hasta
aquí desarrollado. Hasta la siguiente parte.
https://github.com/dotnetuyCode/MiPrimerServicioWCF/blob/master/MiPrimerServicioWCF.rar
Bienvenidos a esta tercera parte del Tutorial de WCF. Como recordarán en la segunda parte de
este tutorial, habíamos visto como crear un servicio WCF, ahora que nuestro servicio esta
creado y como el mismo es una librería de clases (class library) debemos alojarlo en algún
ambiente para que pueda ser consumido por una aplicación cliente.
4. El siguiente paso es poner nuestro sitio web como proyecto de arranque. Debemos en
el Solution Explorer hacer click derecho sobre el sitio web HostServer y seleccionar Set as
StartUp Project desde el menu contextual. Ahora luego de esta configuración en el Solution
explorer el sitio web HostServer debería estar destacado en negrita.
5. Como alojaremos PrimerServicioWCF en este sitio web, debemos agregar una referencia
de PrimerServicioWCF al sitio web. Para esto, debemos hacer click derecho sobre el sitio
web HostServer y seleccionar Add -> Reference… desde el menu contextual. El formulario de
Reference Manager debería aparecer como se muestra en la siguiente imagen.
También necesitamos un archivo de configuración para especificar cosas como el binding del
servicio, la dirección del servicio y el contracto.
Para generar estos dos archivos, usaremos una herramienta SvcUtil.exe en la línea de
comandos. Debemos seguir estos pasos para generar los dos archivos.
Hasta aqui dos archivo han sido generados, uno para el proxy (PrimerServicioWCFRef.cs) y el
otro para la configuración (app.config).
Si abrimos el archivo del proxy, veremos que la interfaz del servicio es reproducida ahi dentro.
Dentro de esta clase, la implementación de la operación del servicio (ObtenerMensaje) es solo
un contenedor que delega la llamada a la implementación del servicio real de la operación.
Dentro del archivo de configuración, veremos las definiciones de PrimerServicioWCF como
por ejemplo el endpoint address, binding, timeout, security and behaviors del servicio.
Personalizando la aplicación cliente
Antes de correr la aplicación cliente, debemos hacer algún trabajito extra. Estos son los
siguientes pasos que debemos seguir:
Console.WriteLine(client.ObtenerMensaje(“Hola WCF”));
Corriendo la aplicación cliente
Ahora estamos preparados para correr la aplicación cliente.
Para hacer esto, en el Explorador de la solución, debemos hacer click derecho sobre nuestra
solución y seleccionar la opción Properties desde el menu contextual, y luego veremos la
ventana de diálogo de propiedades de la solución:
En este formulario, primero debemos seleccionar la opción Multiple startup projects, Luego
cambiar la acción de HostServer a Start without debugging. Cambiar HolaServicioWCF a la
acción Start.
Importatnte: La aplicación HostServer debe estar arriba del proyecto HolaServicioWCF . Si
no es así, usamos las flechas que se encuentran a la derecha para moverlo hacia arriba,
Para poder probar esta configuración, primero pararemos el servicio si lo estamos corriendo, y
presionamos Ctrl + F5. Notaremos que HostServer es ejecutado primero, y luego la aplicación
cliente es la que corre. Bueno hasta aquí este post de como crear una aplicación cliente que
consuma un servicio WCF. Seguiremos en el siguiente post, con nuevas formas de alojar
nuestros servicios WCF. Si desea dejar alguna consulta o comentario, puede dejarlo aquí debajo
del post. Hasta la próxima !!