Locura en la configuración de Windows Communication Foundation

Windows Communication Foundation fue creado para permitir la creación de aplicaciones distribuidas, dándonos una librería de herramientas de comunicación que podemos reusar, sin necesidad de escribir el Service Interface y el Service Gateway desde cero. Tecnologías como servicios web han evolucionado, tienen varias versiones y detalles a tener en cuenta si queremos una comunicación segura, confiable y que soporte interoperabilidad.

El concepto de un Service Model, es ungran avance. Pero hoy, quiero levantar mi mano, para apuntar a algo que hace a WCF una solución”convoluted”. Me refiero a la configuración de WCF.

Si uno quiere usar cualquier característica de WCF, más allá de las más simple, se encontrará rápidamente peleándose con las opciones de configuración de esta bestia. ¿Un síntoma? Si Ud. se olvida de una mínima parte, el canal no funcionará. Si Ud. omite alguna opción de configuración cuando crea un certificado, y se olvida de hacer un paso, entre una docena de pasos de una “to do list”, la llamada via WCF no podrá ser completada. Y tendrá que manejar una cantidad de conceptos, como certificados, tokens, issers, chain of trusts, behaviors, bindings, endpoints, identities, custom bindings, factories, service hosts, channel factories, security options, enumeration types, extensions methods, and… Podría continuar enumerando por horas.

Un ejemplo mínimo. Buscando por la web, encuentro el artículo

WCF (Windows Communication Foundation) Example

Leo ahí:

Being able to switch the transport layer from TCP (Secure SSL) into HTTP with some simple code, that’s amazing!

Sí, correcto, pero

I did have some problems, though. The tcpBinding.Security.Mode = SecurityMode.None; is very crucial on both sides. I’m not sure what it does, but it does not turn off the security completely as I have read in my references. There is still SSL encryption, but on a lower level. It is possible to add certificates to the connection, which also makes the connection more secure.

Acá está el problema. Si uno juega explorando las distintas propiedades y métodos de los bindings y endpoints disponibles, entraremos en un laberinto sin salida visible. Notemos que el autor del artículo no está seguro sobre una de las opciones de configuración que está usando. Y eso que es una sola opción: hay docenas más para configurar, si uno quiere hacer ajuste fino del servicio.

Claro, hay configuración declarativa, no por código. Y hasta podemos usar el  WCF configuration wizard:

Ok, ¿pueden ver los tres tabs, a la derecha? ¡Son más opciones para llenar y entender! ¿Pueden ver el árbol a la izquierda? Es sólo la punta visible de un iceberg. Si expandimos la rama de bindings, entraremos en nuevo mundo de Narnia:

Más propiedades para llenar, ¡y más tabs! Empezará a sentirse incómodo. Si tiene coraje, cree y expanda cualquier cosa en el branch advanced:

El árbol comienza a parecerse a una selva amazónica. Podría tomar capturas de pantallas de cada una de las ramas que el wizard expone, en tal cantidad que podría publicar un volumen completo.

Mucas de estas opciones SON REQUERIDAS si queremos asegurar la comunicación de nuestro servicio, usar tokens emitidos por otras máquinas, definir la autenticación del cliente que invoca y el servicio que atiende, y más. Mi punto es: si Ud. falla en llenar y definir una mínima parte de todo esto, su sistema será un castillo de arena, una torre de cartas en delicado equilibrio. Parace un efecto mariposa: el vuelo de una mariposa en un archivo de configuración, podría crear una tormenta en el resto del sistema. Deberá prestar atención a DEMASIADOS detalles. Es común tener que prestar atención a los detalles en el desarrollo de software. Pero en este caso, pienso que es demasiado: es insano para cualquier mente humana, o para un equipo de desarrollo y despliegue.

En otros sistemas, también tenemos multitud de opciones (¿recuerdan las propiedades un control de formulario?). Pero uno no conocerlas en profundidad a todas (ni siquiera a la mitad), para conseguir algo útil. No es el caso con la configuración de WCF. Este estado de las cosas, apesta. Y si uno quiere escribir directamente en el XML de configuración, terminará con quizás cientos de líneas como:

 

Hay pocas cosas más feas que haya encontrado en mis treinta años de desarrollo (podría enumerar: configuración de EJB, ideas de Cocoon, el Job Control Language en los mainframes IBM…).

Tengo una teoría. Enrico Fermi preguntaba: si los extraterrestres existen, ¿dónde están? ¿por qué no vemos ninguno? La historia es: ellos existen. Comenzaron a estudiar nuestro planeta hace décadas (recuerden, los primeros avistamientos se dieron cerca del Monte Rainier, ¡sí! cerca de Seattle, ya comenzaban a darse cuento que por ahí comenzaba a haber algo raro). Por años, leyeron nuestra literatura, vieron nuestra producción fílmica, hicieron experimentos controlados con seres humanos elegidos. Pero cuando hace unos años comenzaron a estudiar la configuración de EJB y WCF, nuestro planeta estuvo condenado: lo declararon en cuarentena, nadie puede contactarnos, estaremos aislados del resto de la galaxia por diez mil años. La humanidad es una loca civilización, no esperanza sobre nuestro futuro. Nadie puede visitarnos, para que la locura de EJB y WCF no se expanda.

Ok, paro de quejarme. WCF tiene un gran modelo de servicio: ahora, puede manejar JSON, XML, y está preparado para ser flexible y extensible. Pero algunas veces, debemos parar la pelota, y poner en la balanza, no sólo la flexibilidad, sino también la complejidad de la que viene acompañada. Espero escribir posts más positivos, con ejemplos concretos, pero este post ha sido el resultado de días de lucha con WCF, ejemplos, documentación y guías de implementación.

Nos leemos!

Angel “Java” Lopez
http://www.ajlopez.com/
http://twitter.com/ajlopez

This entry was posted in 1389, 3282, 3463. Bookmark the permalink.

6 Responses to Locura en la configuración de Windows Communication Foundation

  1. Román says:

    Invoquemos entonces… KISS KISS KISS!!
    Saludos!
    Román

  2. Querido Angel, es asi. Quizas al darle tanto control al desarrollador, han justamente embarrado demasiado la cancha. Apuesto a que alguien va encapsular mejor las cosas, tipo dataset vs. bindingsource, y para las personas que necesiten control fino, vayan con lo granular, para quienes necesiten resultados rapidos, vayan con el encapsulamiento para el resto de los mortales.

  3. Excelente Angel!. Este post me llega en un momento oportuno donde debo explicar sobre WCF a personas que ni siquiera han pasado por los web services tradicionales. Sin ánimos de descartar WCF, es bueno decir que es una gran tecnología pero tiene sus cosas oscuras y existen altas probabilidades que debamos gastar mucho tiempo lidiando con la configuración. Alguien diría: “WCF es una niña bonita difícil de conquistar”.

  4. Roberto Vacca says:

    A mi me parece que no es tan asi, la configuracion se complica en funcion de la complejidad de la solucion. No es lo mismo conectarse con seguridad integrada con http que conectarse con un Token de seguridad federada. Si investigamos para que sirve cada cosa antes de utilizar el editor seguramente nos sera mas sencillo.

    Seguramente se puede mejorar el editor, a mi personalmente me gustarian mas tooltips y ayuda integrada en las propiedades.

    Y lo mas importante a destacar es que deben corregir los bugs que dejan campos vacios en el XML. Por ejempli si pones un texto en el DNS y luego lo limpias la configuracion queda mal. Por ejemplo si escribis algo en el DNS del Endpoint te queda asi:



    y si lo blanqueas en el editor queda asi:


    y luego te tira error y tenes que limpiarlo a mano.

  5. Roberto Vacca says:

    Estimado yo la verdad estoy en desacuerdo con vos. Hace dos años ya que trabajo con WCF. Estoy de acuerdo en que la configuración es un poco compleja pero tampoco como lo pintas vos. A mí me parece que lo que no podes hacer con WCF es mandarte, sin leer nada, a configurar servicios felizmente, primero hace falta leer y comprender los conceptos de diseño antes de encarar a utilizar un framework (Como debería hacerse con toda herramienta compleja que uno utiliza) y a esto sumale que es un framework de aplicaciones distribuidas por lo cual tenes que tener muchos otros conceptos de comunicaciones bien incorporados.

    PD: Además me parece una exageración que pongas:
    “Hay pocas cosas más feas que haya encontrado en mis treinta años de desarrollo” si te parece tan malo ponete a usar el eclipse y programa en java

  6. Marcelo Montenegro says:

    Hola Angel, serias tan amable de actualizar los links de las capturas de pantalla ya que se perdieron. Gracias.

    PS: Hoy estoy comenzando con WCF…. y ya veo lo que me espera :(

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>