Menu

Consumir un Servicio Web de terceros

abril 2, 2013 - Delphi

A petición de uno de mis lectores, he creado un pequeño cliente que consume un servicio web de terceros, en éste caso el mismo que usé para mi entrada anterior Probando Delphi for iOS  pero en una aplicación de escritorio.

El proceso es muy simple.

– Creamos una nueva aplicación VCL.

– Importamos el WSDL del Servicio Web en éste caso de Banxico.

Éste importador nos genera una clase con la definición del Servicio Web lista para ser consumida, como lo podemos apreciar en la siguiente imagen.

– Agregamos los objetos que deseamos para que nuestra interfáz gráfica se vea un poco decente 🙂

– Agregamos el código necesario para consumir el método que obtiene el tipo de cambio de las diferentes monedas y ejecutamos nuestra aplicación.

Cabe mencionar que por el poco tiempo que dispongo no pude utilizar el XML Data Binding para crear las clases que representan el esquema del documento XML por lo que tuve que «trabajar» con algo más simple para serializar el XML que nos regresa el Servicio Web.

Enjoy!!!

Nota: Desarrollado con Delphi XE2


Ésta entrada y el código fuente son libres para su uso y publicación, lo único que te pido, si te parece justo, es mencionar la fuente de donde se obtuvo.

31 pensamientos sobre “Consumir un Servicio Web de terceros

GustavoSV

Eliseo, muchas gracias por su aporte, se ve tan sencillo frente a tanta complejidad que hay detrás de ese mecanismo. Me será muy útil.

PD: por si alguien sigue el ejemplo, la dirección completa del servicio es: http://www.banxico.org.mx:80/DgieWSWeb/DgieWS?WSDL

Respuesta
    EliseoGN

    Que bien Gustavo. Que bueno que te sea útil, ya valió la pena ésta entrada.

    La verdad es que Delphi te hace la vida fácil, el web Service tiene otros métodos, yo sólo usé el del tipo de cambio, intenta consumir los otros, te servirá de aprendizaje.

    Saludos y gracias por el interés.

    Respuesta
      Abigail

      Tu aporte es muy bueno pero te pregunto no tendras al alcance un proyecto similar de web services pero que sea por ejemplo del tipo de clima y un codigo postal que me arroge segun el codigo postal ya sea en Delphi o C++ en la que pueda guiarme o entender las funcinalidades del web services o al menos que paramtros mandar a llamar ya teniendo el WSDL

      Respuesta
        EliseoGN

        Hay varios servicios web en el ciber-espacio, pero el que encontré más cercano a tu requerimiento es el siguiente

        http://wsf.cdyne.com/WeatherWS/Weather.asmx

        Lo malo es que solo funciona para ciudades de Estados Unidos.

        Puedes seguir éste o cualquier otro tutorial para desarrollar un cliente que consuma el servicio web.

        Saludos

        Respuesta
Edgar Ramirez

Excelente artículo. Me parece que en estos días los sistemas van muy de la mano con el consumo de webservices, especialmente ahora con tanto servicio en la nube.

Un abrazo y gracias por la información.

Respuesta
    EliseoGN

    Así es, aunque me parece que se tardaron mucho en aceptar éste tipo de procesos.

    Ahora hay un auge de Servicios Web, pero hace mucho que están disponibles; ahora mismo recuerdo el tutorial que hice en el 2008 y que fué a raíz de la primer reunión Delphi en México.

    Yo ya conocía desde antes estos servicios ya que desarrollé un cliente que consume un servicio web de un sistema de procesamiento de voz llamado Callegra, pero lo desarrollé con C#.

    Saludos 🙂

    Respuesta
      Edgar Ramirez

      Recuerdo esa reunión con nuestro amigo Jach. Muy interesante todo lo que vimos en aquella ocasión. Valdría la pena amigo mio organizar un taller presencial de creación de webservices con Delphi

      Respuesta
        EliseoGN

        Pues vamos organizando ya un programa de actividades, no solo de servicios web, sino de otras funcionalidades, hay que comentarlo en delphiaccess para concretar los puntos.

        Va.

        Respuesta
adolfo

Se que ya tiene su tiempecito este blog pero a mi me ayudo hasta llegar a la parte del web service, pero aun no eh podido usar la clase que me permite usar xml.

Que debo hacer? Debo importar una libreria?
Eh estado buscando, al parecer es eso, pero si hay algo concreto que me puedan sugerir, bienvenido.

Saludos y gracias de ante mano.

Respuesta
    EliseoGN

    Que tal Adolfo,

    El componente XML Data Binding es el que te permite crear una clase con la definición de los archivos XML.

    Dicho componente se encuentra en la carpeta XML de la Galería de plantillas del repositorio de objetos de RAD Studio/Delphi.

    Gracias por leerme.

    Saludos

    Respuesta
Janny

Hola,

Excelente aporte!. Mi duda es, ¿el ejemplo que presentas para que version de Delphi es?

En mi caso, intente abrirlo con Delphi 5(no puedo usar otra version) y me marco ciertos conflictos en cuanto a librerias…¿crees que se pueda hacer correr para mi version de Delphi?

Ojalá y si ya que tu ejemplo me esta sirviendo de referencia para desarrollar un proyecto.

Saludos

Respuesta
    EliseoGN

    Hola Janny

    El código de ésta publicación está hecho con Delphi XE2, lamentablemente con Delphi5 no puedes ejecutar el código, sin embargo, sé de una página con la que puedes intentar resolver el problema.

    Web Service y Delphi 5

    Espero te ayude.

    Saludos y gracias por leerme.

    Respuesta
Gabriela

hola! te hago una consulta, quiero consumir un WebService y cuando Importo el WSDL del Servicio Web, me tira error como si el documento estuviera vacio (y no lo esta). Me pasa con todos los ejemplos que pruebo. Sabes que puede ser?
Muchas Gracias

Respuesta
    EliseoGN

    Hola Gabriela.

    Hay varias probabilidades, puede ser porque requieres de algún certificado para acceder al WebService, que la url no sea correcta, que en realidad no tenga nada.

    Si me pudieras mostrar o enviar la url a través de la página de contacto con gusto te ayudaría con más precisión.

    Saludos y gracias por leerme

    Respuesta
salvador mr

Muy buen articulo, gracias.

Respuesta
Alexander Medina

muy buen el ejemplo, lo estoy modificando para comsumir otro tipo de webservice pero me arroja un error al momento de indicacarle el puerto a utilizar, en el ejemplo que das utilizas DgieWSPort como puerto, yo modifico ese valor segun lo que me indica el puerto del webservice pero me indica que no esta declarado, el webservice que deseo utilizar es http://www.sicm.gob.ve/sicm.php?wsdl, utilice como base tu ejemplo, solo importe la unidad y cambie uno que otro valor para utilizar la funcion holasicm pero sin exito alguno, si me pudieras colaborar con esto te estaria muy agradecido, saludos desde venezuela.

Respuesta
    EliseoGN

    Hola Alexander,

    He creado una pequeña aplicación y funciona sin problema como lo podrás observar en la siguiente imagen:

    http://www.delphienmovimiento.mx/wp-content/uploads/2016/01/Test.png

    Puedes descargar el código fuente desde éste enlace.

    http://www.delphienmovimiento.mx/downloads/Codigo+Test+webService

    Respuesta
      Alexander Medina

      Muchas Gracias eliseo, tenia mas de un año con este detalle, ahora tengo material para trabajar, solo me faltaba este enlace, de verdad muchisimas gracias, cualquier detalle te comento, una vez mas muchisimas gracias.

      Respuesta
        EliseoGN

        Espero lleves a buen puerto tu aplicación, me alegra saber que éste artículo ha servido de algo. En lo que te pueda seguir ayudando con mucho gusto.

        También te recomiendo que todas tus dudas las hagas en la Comunidad DelphiAccess (http://delphiaccess.com/foros) podrás obtener ayuda de mas compañeros.

        Saludos

        Respuesta
PatricioRA

Hola, soy nuevo en esto del webservi, tengo delphi 6 alguien sabe donde conseguir informacion, ya que tengo que hacer un trabajo y consumir un webservi.

gracias

Respuesta
juve

HOla Me podrin ayudar a saber como se saco esta liga:
http://www.banxico.org.mx:80/DgieWSWeb/DgieWS?WSDL
de la pagina de http://www.banxico.org.mx

Saludos

Respuesta
    EliseoGN

    Hola Juve,

    No entiendo tu pregunta, pero esa url la encontré googleando.

    Saludos

    Respuesta
      Francisco Fernández

      Hola.

      Estoy haciendo una llamada a una url que necesita certificado digital. ¿Sabrías decirme cómo se hace para incluir el certificado en el proceso?

      Gracias

      Respuesta
        EliseoGN

        Que tal Francisco

        Si fuese posible compartenos la URL del Servicio Web y con gusto vemos que es y como pide el certificado.

        Saludos

        Respuesta
EliseoGN

Buen día Francisco,

Ya he importado el wsdl y no veo donde solicita el certificado, no se si lo pide cuando se envía algo real, porque he realizado un REQUEST y el WebService respondió con un mensaje de error como se ve en la siguiente imagen:

SoapUI

Si te pidiera el certificado de la página lo que se tiene que hacer es agregarlo en el almacen de «Entidades de Certificación Raiz de Confianza».

Si puedes comentarme un poco más acerca de lo que te está deteniendo para consumir el servicio con gusto lo vemos.

Saludos

Respuesta
EliseoGN

Revisando veo que el servicio regresa dos certificados en la SSL info del RESPONSE.

Puedes agregarlos al almacen que te comento desde la Consola de Administración de Microsoft.

Puedes ver «éste artículo» para agregar certificados.

Saludos

Respuesta
    Francisco

    Eliseo.

    Gracias por tu interés. Echaré un vistazo al link que me indicas y te comento.

    Saludos

    Respuesta
Francisco

Hola, estoy aquí de nuevo.

He seguido las instrucciones que me dabas, he añadido el complemento «certificados» en el mmc pero cuando salgo me dice de grabar y crea un fichero .msc que la verdad no sé qué hacer con él.

La llamada que hago en el programa delphi es la siguiente:

result := GetsiiSOAP.SuministroLRFacturasEmitidas(ASuministroLRFacturasEmitidas);

y me dice «Se requiere un certificado para completar la autenticación de cliente»

Gracias y un saludo

Respuesta
    EliseoGN

    Hola Francisco, lamentablemente, no tengo los datos necesarios para poder realizar una prueba real, si te proporcionaron datos de prueba y puedes enviarmelos con gusto te podría ayudar de mejor forma.

    Saludos

    Respuesta
Francisco

Hola de nuevo.

Lamentablemente no tengo datos de prueba. Lo único que tengo es un documento que distribuye la agencia tributaria y el pequeño programa de pruebas que estoy haciendo y que me da el error al hacer la llamada. Las dos cosas las tienes en este sitio ftp:
http://datos.newtron.es/Varios/

Gracias de nuevo y un saludo

Respuesta

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *