Al desarrollar aplicaciones integradas con sistemas que no están dentro de nuestra organización nos encontramos con dependencias que no podemos controlar. Romper la dependencia con sistemas de los cuales no tenemos el control en el proyecto es una necesidad casi obligatoria. La mayoría de ingenieros que han trabajado con este escenario, en algún momento se ha encontrado con el típico problema.
- “¡Estamos parados porque el servicio de ACME no funciona y así no podemos avanzar en el proyecto!”
Los retrasos y desvíos por este motivo son frecuentes pero evitables en la mayoría de casos.
Procesos de integración con sistemas externos, aplicaciones móviles que consumen datos de repositorios de sistemas de terceros, son algunos ejemplos de desarrollos con necesidades de recursos no controlados. Estos desarrollos nos obligan a estar interconectados a través de algún estándar previamente definido. Actualmente existen de forma extendida dos diseños para exponer datos a través de la web. Por un lado están los servicios web y por otro los servicios REST. Ambas soluciones tienen sus ventajas y desventajas que lo dejaremos para un artículo posterior. En este artículo nos centraremos en cómo romper la dependencia a un servicio web de un sistema externo a nuestra organización a partir de un fichero de tipo Web Service Description Language (WSDL).
Generación de código a partir de una definición de servicio web
Lo primero que tenemos que hacer es conseguir la definición del servicio web (fichero WSDL). Esta definición puede ser proporcionada por el propietario del servicio o directamente obtenida a través de la URL del servicio web. Una vez disponemos del fichero wsdl ejecutamos el siguiente comando en nuestra línea de comandos de Visual Studio.
svcutil Acmeservice.wsdl
Si nuestra definición del servicio web tiene esquemas referenciados habrá que descargarlos y añadirlos en el comando a continuación del fichero wsdl.
svcutil Acmeservice.wsdl AcmeSchema1.xsd AcmeSchema2.xsd
Este comando generará el código necesario para poder implementar nuestro propio servicio web en la ruta de trabajo. Este código contendrá la interficie de definición del servicio, las clases necesarias y todos los namespaces definidos en el servicio original.
El siguiente paso será copiar el fichero generado en nuestro propio proyecto de servicio web. Una vez hecho esto, será necesario implementar la interficie para desarrollar el código que nos servirá, para trabajar, sin la necesidad de depender del servicio externo.
Con estos sencillos pasos podemos generar nuestro propio servicio web para que pueda ser consumido por nuestra aplicación, de la misma manera que lo haríamos consumiendo el servicio del cual no tenemos el control.