Windows Communication Foundation: Channel Factory

Channel-FactoryDurante estos últimos meses he estado trabajando con Windows Comunication Foundation (WCF). Para aquellos a los que no os suene demasiado, WCF es un framework para la creación de servicios. Básicamente se utiliza para crear las comunicaciones entre cliente y servidor y así poder mandar información de un lado a otro. Fue creada con el fin de permitir una programación rápida de sistemas distribuidos y el desarrollo de aplicaciones, basadas en arquitecturas orientadas a servicios (también conocido como SOA), con una API simple. También se pueden realizar servicios REST (Arquitectura ROA), aunque la llegada de WebApi ha convertido a esta última en la mejor opción para realizar servicios REST.

Con WCF hay dos maneras diferentes de mandar estos mensajes: a través de un proxy o bien usando el ChannelFactory. Hoy me gustaría hablaros de este último.

En un proceso de comunicación estándar intervienen varios elementos: emisor, receptor, código, canal, mensaje y contexto. Sin entrar en mucho detalle, y centrándonos directamente en el punto que nos ocupa, el canal de comunicación es aquel elemento por donde el emisor transmite la información al receptor. En WCF el ChannelFactory es el encargado de crear ese canal de comunicación entre cliente y servidor sin necesidad de crear un proxy. Está implementado por la Interface IChannelFactory y la idea es utilizarlo cuando se conoce el contrato/descripción de los métodos del servidor dónde está nuestro Servicio WCF. Imaginemos que tenemos un servicio de… ¡usuarios! Este servicio nos permite gestionar los usuarios de una aplicación y la interface que nos expone el servicio se llama “IUsuarios” y tiene los siguientes métodos: AltaUsuario(), BajaUsuario() y ModificarUsuario().

Channel-Factory-1

Desde el cliente necesitamos llamar a ese servicio para poder realizar las operaciones necesarias para gestionar los usuarios de nuestra aplicación. Para ello nos creamos un ChannelFactory del tipo IUsuarios: al que habría que pasarle por parámetro un endPoint (url donde se encuentra la descripción de nuestro servicio) y un Binding donde especificaremos el transporte la codificación y los detalles del protocolo requeridos para los clientes y servicios para poder llevar a cabo la comunicación.

Channel-Factory-2

Una vez creado el ChannelFactory, ya podemos crear el Channel que utilizaremos para llamar a los métodos de nuestro servicio.

Channel-Factory-3

Con el channel ya podemos llamar a los métodos:

Channel-Factory-4

Finalmente, una vez hayamos realizado las operaciones necesarias debemos cerrar el ChannelFactory:

Channel-Factory-5

Como veis, se trata de una manera muy cómoda de realizar llamadas a servicios WCF siempre que podamos referenciar en nuestro cliente las dll’s donde está el contrato del servicio y este no cambie constantemente. Si estas no fueran las condiciones de nuestro contexto, deberíamos de valorar la posibilidad de usar un proxy. Estas son las diferencias entre un sistema u otro que nos deberían orientar sobre que sistema usar:

Channel-Factory-6

Estas son algunas de las diferencias entre el proxy y el ChannelFactory; es nuestra responsabilidad como programadores decidir qué forma es la más adecuada para nuestro proyecto.

Y para acabar, me gustaría destacar que la configuración de un servicio WCF (a nivel de bindings, endpoints, seguridad, web.config,…) no es trivial y que acostumbra a traer algún que otro dolor de cabeza.

Descubre aquí cómo SOGETI puede ayudarte en el desarrollo de tus proyectos web.

Marçal Montserrat

Software Engineer and Team Lead | Soluciones Microsoft | SOGETI ESPAÑA

One thought

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s