WCF Services (.NET Framework 3.5) + GeneXus
En el post anterior relacionado con WCF, hablaba de la necesidad de programar un servicio seguro (firmado digitalmente con certificados X.509).
Gracias a un link de Sebastian, me compré el libro Learning WCF (está bueno) y practique un poco con los Labs que trae. Se pueden bajar de aca, sin necesidad del libro, aunque este ultimo es recomendable pues explica bastante.
Después de hacer funcionar el ejemplo canónico de un web service firmado con certificados digitales (tanto del lado del servidor, como del cliente), me enfrenté a la divertida tarea de poner eso en funcionamiento.
Tenía 2 tareas por delante:
1) Hacer funcionar el servicio en IIS, pues en los ejemplos se usa el servidor interno que viene con WCF, que es muy practico para el debug y la programacion.
2) Integrar lo programado con VS.2008, a nuestra programación con GeneXus 9.0.
Integrar con IIS
El hostear el servicio en IIS, pense que iba a ser una tarea trivial, pero no fue tan asi.
En primer lugar, pensé que iba a tener que crear otro ApplicationPool, para soportar el .NETF 3.5.
Después de buscar varias veces en el IIS, no encontraba donde decirle que determinado AppPool, tiene que ejecutarse con esa versión.
Lo que recordé después es que el NetF 3.5 = NetF 2.0 + WCF + WPF.
Por lo tanto, no hay que configurar ningún aplication pool adicional, sino que alcanza con utilizar los que venimos usando para 2.0.
La otra cosa que me pasó fue cuando quise ver el WSDL (o el contrato) del WS en el IIS, en el servicio nuevo, es de la forma http://servidoriis/dirvir/service.svc?wsdl.
Como lograr que la extensión .SVC sea correctamente interpretada. Sabia que por el lado de los controladores, pero no sabia que parámetros ponerle.
Al final, leyendo en MSDN, encontré que hay que hacer esto:
Expand the item labeled Microsoft .NET Framework 3.0, select Windows Communication Foundation Http Activation.
Integracion de lo programado con GX 9.0 con WCF.
Para lograr esto, intenté algunas cosas diversas .
La primera es intentar lograr que GeneXus genere lo necesario para poderlo compilar con el NETF 3.5 y que quede como un servicio WCF.
Para esto se necesita agregar en el código atributos [] y no logré hacerlo.
También intente agregar el código generado por Genexus a proyecto de VS.2008, pero el resultado no fue muy alentador y iba a ser complicado de mantener.
Decidi por lo tanto programar un Webservice en VS, que llame a otro WS que está programado con GeneXus. Esta solución tiene la ventaja que dispongo de la definición de los parámetros de WS de Genexus desde el programa VS y si en algún momento cambian, alcanzan con hacerle un refresh a la referencia del WSDL.
Tambien es segura, pues por el proxy puedo limitar que este WS sea invocado solamente desde una direccion IP y por la seguridad del IIS de la Intranet, limito a los usuarios que puedan invocarlo. La comunicación en todos los casos va a ser con SSL, por lo que tampoco debería tener problemas de que alguien pueda interceptar la comunicación.
Al final nos esta quedando una solución relativamente sencilla, que permite aprovechar las ventajas de WCF ** con la facilidad de programar WS con Genexus.
En el futuro, espero que GeneXus incorpore WCF a las tecnologías soportadas. Por lo que se no deberia faltar mucho, pues Deklarit (el hijo chico de GeneXus) ya lo soporta.
** Entre estas ventajas esta la de poder definir este servicio como WS o como cola de datos (MSMQ) , de cambiar el método de autenticación y muchos etcéteras mas de la forma que se comporta este programa.
Hola Enrique, hoy por hoy la solución que hiciste es la mejor sin dudas.
ResponderBorrarCon respecto al soporte de GX para esto te cuento que el generador .NET lo hemos probado y te diría que luego de la release de GX tendremos WCF para los web services generados con .NET.
Saludos
Interesante solución.
ResponderBorrarTe paso un par de tips que pueden llegar a ayudarte. WCF es del .net 3.0 y no del 3.5, por lo que puedes utilizar el VS2005 (instalando las extensions.
Y la otra, el programita svcutil te genera los prxies necesarios para acceder a WCF services, creo que ese código generado puedes agregarlo a tu solución creada por GX (o alguna con la cual GX pueda hablar) y tendrás resulto el problema.
Suerte con eso!
Gaston:
ResponderBorrarEs MARAVILLOSO que ya hayan realizado las prueba con el generador .NET y que se puedan tener web services GX que utilicen toda la polenta de WCF.
Gracias!.
Sebastian:
ResponderBorrarGracias por los tips.
El SvcUtil ya lo habia usado, pero no conocia las extensiones para VS.2005.
Igual, por un tema de facilidad de deployment y de hacer solo una documentacion, creo que voy a quedarme con el 3.5, para no tener que dar dos documentaciones diferentes o con secciones especificas para cada framework.