Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Dudas sobre Webservices Soap y Indy (https://www.clubdelphi.com/foros/showthread.php?t=66669)

XaviQ 06-03-2010 14:16:52

Dudas sobre Webservices Soap y Indy
 
Buenos dias.

La verdad que me estoy metiendo actualmente con el tema de webservices, donde tengo que consumirlos desde delphi y me salen unas dudas que a ver si las podemos comentar.

- Entiendo lo que es el fichero .wsdl, un fichero donde se tiene definido los metodos, propiedades de dicho webservices, ese fichero se puede importar en delphi y te genera el modulo de donde puedes usar esos metodos y consumir el webservices, ahi ya he echo alguna prueba.
Pero tambien existen webservices que no usan estos ficheros de definicion verdad?
- Otra duda, todo webservices esta compuesto de una url acabada en la extension .asmx? o no tiene porque?
- A un webservices siempre se le tendra que llamar usando algun metodo? o puede ser que haya webservices simples que llamandolo te devuelvan un xml?

Y por ultimo que metodologia usais para consumir webservices desde delphi?
Yo he comenzado intentantdo usar los componentes Indy pero no se bien bien si voy por el biuen camino, os cuento una prueba simple:
Donde intento llamar a un webservices y grabar en disco el xml que me tendria que devolver.
urlweb := '<aqui vendria la url del webservices>';

Content := IdHTTP1.Get(urlweb);
XMLDocument1 := TXMLDocument.Create(nil);
XMLDocument1.Active := True;
XMLDocument1.XML.Text := Content;
XMLDocument1.XML.SaveToFile('c:\prueba.xml');
XMLDocument1.Active := False;

Voy bien por ese camino? o el IdHTTP no se usa para consumir webservices SOAP?
La verdad que estoy un poco verde y estoy intentando recabar toda la informacion que pueda encontrar por internet.

Muchas Gracias.

roman 06-03-2010 17:39:53

Para mi, un servicio web es la combinación de wsdl y soap aunque en algunas partes tembién entienden un xml-rpc como servicio web. Según entiendo, xml-rpc es el antecesor de soap y no requiere un archivo wsdl.

Un servicio web puede estar escrito en cualquier lenguaje y ser consumido por cualquier lenguaje, así que la extensión es indistinta. asmx, creo, se refiere los servicios web escrtos en asp, pero puedes tener servicios escritos en php, java, python, delphi, c, etc.

Dado que un servicio web se comunica mediante mensajes soap y dado que un mensaje soap no es otra cosa que un documento xml, en principio podrías usar cualquier cosa capaz de enviar, recibir y leer documentos xml para consumir un servicio.

En Delphi lo puedes hacer con Indy o WinInet, por ejemplo. Sólo tienes que hacer un Post con un Content-Type fijado a text/xml y mandar el encabezado SOAPAction con el método requerido.

Sin embargo, hacerlo así es muy rudimentario ya que tú mismo tendrías que formar el mensaje soap para llamar a un método y analizar a pie el xml de vuelta.

Ya observaste que Delphi trae un importador de wsdl, que, básicamente y hasta donde entiendo, analiza el archivo de definición y traduce las estructuras de datos definidas en el wsdl en clases derivadas de TRemotable, que te permiten acceder a dichas estructuras a la manera de Delphi, de manera que te evitas el análisis manual del xml.

Asi que me parece que es la manera más adecuada de consumir un servicio web con delphi.

En fin, yo en esto también estoy muy verde, pero es lo que he entendido hasta ahora.

// Saludos

jpiedra 29-03-2011 16:49:26

Hola, yo tengo un wsdl que lo he importado a Delphi, pero no me muestra ningún metodo para poder accesar, es decir, me muestra nada mas esto

unit TimbradorIntegradores_v5;

interface

uses InvokeRegistry, SOAPHTTPClient, Types, XSBuiltIns;

type

implementation

initialization

end.

Que estoy haciendo mal?

GRacias de antemano

roman 29-03-2011 16:59:24

Posiblemente el wsdl del servicio no especifica correctamente los métodos. ¿Es un servicio público? ¿Puedes dar la dirección?

// Saludos

jpiedra 29-03-2011 18:15:15

Si claro, es
No tengo permitido poner url todavia, lo paso así, ojala se entienda

"
://201.103.89.93:59080

/axis2/

services/

TimbradorIntegradores?wsdl"

El WS es no visible, lo he importado en VS pero no tengo idea de como implementarlo en Delphi

Alguien ha hecho algo parecido?

Gracias de antemano
Saludos

movorack 30-03-2011 02:11:23

La respuesta que te dió *román* es mu acertada. he desarrollado mis websevice en php (nuSOAP) para consumirlos desde delphi. aunque he consumido otrso webservice algunos en asp otros ni siquiera se en que los habrán hecho.

importarlos es bastante sencillo con el asistente de delphi... pero el asistente de delphi tiene que "ver" el xml que genera el wsdl. de otra manera el asistente de importación no funcionará correctamente.

la url que nos pasaste no se si está correcta:

http://201.103.89.93:59080/axis2/ser...gradores?wsdl"

pero allí no despliega absolutamente nada.

Behemot 30-03-2011 07:12:18

Parece ser que es la versión de delphi, mira este link


La franja horaria es GMT +2. Ahora son las 00:50:06.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi