Ir al contenido


Foto

como llamar a un servicio web


  • Por favor identifícate para responder
21 respuestas en este tema

#1 FELIX

FELIX

    Advanced Member

  • Miembros
  • PipPipPip
  • 123 mensajes

Escrito 30 noviembre 2011 - 07:05

Saludos.
Tengo problemas nuevamente, me pueden explicar como asociar los datos que vienen de un servicio web a un datasource o algun otro componente de delphi, nunca habia hecho esto y no tengo idea de como hacerlo  :|.
                                                               
  • 0

#2 felipe

felipe

    Advanced Member

  • Administrador
  • 3.283 mensajes
  • LocationColombia

Escrito 30 noviembre 2011 - 07:09

Hola, ¿podrías ser un poco más específico en tu inquietud?, por ejemplo, ¿cómo hiciste el servicio web?


Saludos!
  • 0

#3 FELIX

FELIX

    Advanced Member

  • Miembros
  • PipPipPip
  • 123 mensajes

Escrito 30 noviembre 2011 - 07:14

anteriormente llamba los datos con un query y a su vez estos estaban asociados a un datasource y a un dbgrid, pero ahora deben conectarse a un servicio web que contiene los datos.

debo crear la aplicacion cliente que consulira el servicio web   
  • 0

#4 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

Escrito 30 noviembre 2011 - 08:38

Hola FELIX,

Te deben dar la url del wsdl para que puedas extraer las clases y métodos, después con el WSDL Importer de Delphi, creas la unidad que te permitirá consumir el servicio web.

Puedes tomar como base el tutorial de webservice que tenemos y puedes buscar la palabra CURL donde también vas a poder encontrar otra alternativa excelente para consumir webservices.

Saludos
  • 0

#5 FELIX

FELIX

    Advanced Member

  • Miembros
  • PipPipPip
  • 123 mensajes

Escrito 30 noviembre 2011 - 02:10

Gracias Egostar por tu respuesta, hice la conexion como decia en los tutoriales pero al consumir el servicio me sale un error.

empty soap body with no child element not supported for rpc

  • 0

#6 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

Escrito 30 noviembre 2011 - 02:18

Hola

Pues ese error es porque el cuerpo del SOAP no contiene elementos, puede ser que no estés llenando los campos en tu REQUEST o que el retorno del Servicio Web no regresa datos asunto que no me "cuadra".

Si puedes mostrarnos el código de como estás "llenando" la petición podriamos ayudarte mejro.

Saludos
  • 0

#7 FELIX

FELIX

    Advanced Member

  • Miembros
  • PipPipPip
  • 123 mensajes

Escrito 30 noviembre 2011 - 02:28

este es mi codigo donde estoy consumiendo el servicio.



delphi
  1. unit Unit1;
  2.  
  3. interface
  4.  
  5. uses
  6.   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  7.   Dialogs,DatosWSImpl, StdCtrls;
  8.  
  9. type
  10.   TForm1 = class(TForm)
  11.     Button1: TButton;
  12.     procedure Button1Click(Sender: TObject);
  13.   private
  14.     servicio_web : DatosWS;
  15.     { Private declarations }
  16.   public
  17.     { Public declarations }
  18.   end;
  19.  
  20. var
  21.   Form1: TForm1;
  22.  
  23. implementation
  24.  
  25. {$R *.dfm}
  26.  
  27. procedure TForm1.Button1Click(Sender: TObject);
  28. var strXml: datosVOArray;
  29. begin
  30.   servicio_web:=GetDatosWS(True);
  31.   strXml:=servicio_web.buscarDatos;//aqui se produce el error
  32. end;
  33.  
  34. end.


  • 0

#8 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

Escrito 30 noviembre 2011 - 02:31

Hola

¿ Que tipo de dato es datosVOArray ?

Salud OS
  • 0

#9 FELIX

FELIX

    Advanced Member

  • Miembros
  • PipPipPip
  • 123 mensajes

Escrito 30 noviembre 2011 - 02:38

Cuando se implemento el proceso con el WSDL Importer el autoamticamente lo creo de esta forma.

datosVOArray = array of datosVO;

y datosVO esta implementado asi:

datosVO = class(TRemotable)
  • 0

#10 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

Escrito 30 noviembre 2011 - 02:48

Cuando se implemento el proceso con el WSDL Importer el autoamticamente lo creo de esta forma.

datosVOArray = array of datosVO;

y datosVO esta implementado asi:

datosVO = class(TRemotable)


Muy bien, ya veo el problema, no puedes acceder al Arreglo de datos de forma lineal, mira éste hilo que te va a decir como recibir los datos de un Array of TRemotable

Salud OS
  • 0

#11 FELIX

FELIX

    Advanced Member

  • Miembros
  • PipPipPip
  • 123 mensajes

Escrito 30 noviembre 2011 - 03:13

Gracias por todo Egostar ya estoy comprendiendo este tema un poco mas, revisare el hilo que me recomendaste y estare comentando como me fue  (y)
  • 0

#12 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

Escrito 30 noviembre 2011 - 03:17

Gracias por todo Egostar ya estoy comprendiendo este tema un poco mas, revisare el hilo que me recomendaste y estare comentando como me fue  (y)


Perfecto, cualquier duda publícala y con gusto aprendemos juntos :)

Salud OS
  • 0

#13 FELIX

FELIX

    Advanced Member

  • Miembros
  • PipPipPip
  • 123 mensajes

Escrito 01 diciembre 2011 - 07:55

Hola

Trate de seguir los pasos que me mostro Egostar en un hilo anterior pero no me resulto, no se que estoy haciendo mal al tartar de mostrar los datosme pueden dar otra ayuda.

Saludos.


  • 0

#14 FELIX

FELIX

    Advanced Member

  • Miembros
  • PipPipPip
  • 123 mensajes

Escrito 01 diciembre 2011 - 08:05

Se me olvidaba que estoy con delphi 7, no se si tenga algo que ver
  • 0

#15 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

Escrito 01 diciembre 2011 - 08:45

Hola

Trate de seguir los pasos que me mostro Egostar en un hilo anterior pero no me resulto, no se que estoy haciendo mal al tartar de mostrar los datosme pueden dar otra ayuda.

Saludos.


Hola

Es un poco dificil ayudarte si no contamos acceso al webservice, y entiendo que no es algo que puedas publicar libremente, pero, seria bueno que nos mostraras la estructura de la clase datosVO y el código que utilizaste y que no te resultó.

Saludos

  • 0

#16 FELIX

FELIX

    Advanced Member

  • Miembros
  • PipPipPip
  • 123 mensajes

Escrito 01 diciembre 2011 - 10:22

te envio el codigo que hasta ahora tengo



delphi
  1. datosWS = interface(IInvokable)
  2.   ['{87B6C67B-F1BC-6D05-4154-454653E76C62}']
  3.  
  4.   function  buscarDatosActivos: DatosVOArray; stdcall;
  5.  
  6. [color=red]/*estructura del ws[/color]
  7. DatosVO = class(TRemotable)
  8. private
  9.     FdesDepartamento: WideString;
  10.     FdesMunicipio: WideString;
  11.     Fid: Int64;
  12. public
  13.     constructor Create; override;
  14.     destructor Destroy; override;
  15. published
  16.     property desDepartamento: WideString read FdesDepartamento write FdesDepartamento;
  17.     property desMunicipio: WideString read FdesMunicipio write FdesMunicipio;
  18.     property id: Int64 read Fid write Fid;
  19.  
  20.  
  21. [color=red]/*Procedimiento donde se llama*[/color]
  22. procedure TForm1.Button1Click(Sender: TObject);
  23. var
  24. Servicio_web:DatosWS;
  25. strXml: DatosVOArray;
  26. i: Integer;
  27. objCont: DatosVO;
  28. begin
  29.   Servicio_web := GetDatosWS(True);
  30.   strXml := Servicio_web.buscarDatosActivos; [color=red]// Aqui sale el error[/color]
  31.   ClientDataSet1.Open;
  32.   ClientDataSet1.DisableControls;
  33.   for i := 0 to High(strXml)-1 do
  34.   begin
  35.   objCont := strXml[i] As contratoSeguroVO;
  36.   ClientDataSet1.Append;
  37.   ClientDataSet1.FieldByName('idContrato').AsInteger :=  objCont.id;
  38.   ClientDataSet1.FieldByName('municipio').AsString :=  objCont.desMunicipio;
  39.   ClientDataSet1.FieldByName('departamento').AsString :=  objCont.desDepartamento;
  40.   ClientDataSet1.Post;
  41.   end;
  42.   ClientDataSet1.EnableControls;
  43. end;



  • 0

#17 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 01 diciembre 2011 - 10:39

Amigo Felix, por favor utiliza las etiquetas que para eso estan ;)
  • 0

#18 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

Escrito 01 diciembre 2011 - 10:42

Que error te manda, eso es muy importante para determinar las posibles soluciones.

Saludos
  • 0

#19 FELIX

FELIX

    Advanced Member

  • Miembros
  • PipPipPip
  • 123 mensajes

Escrito 01 diciembre 2011 - 10:53

siempre sale error



delphi
  1. empty soap body with no child element not supported for rpc

.

Consultando en internet dice que puede ser que falte una actualizacion de delphi o algun complemento.
  • 0

#20 FELIX

FELIX

    Advanced Member

  • Miembros
  • PipPipPip
  • 123 mensajes

Escrito 01 diciembre 2011 - 11:30

Ya encontre el problema la solucion la encontre en http://www.delphigro.../5/344488.html] http://www.delphigro...2/5/344488.html.

En datosws reemplaze la linea
  //InvRegistry.RegisterInvokeOptions(TypeInfo(ContratacionWS), ioLiteral);

Por 
  InvRegistry.RegisterInvokeOptions(TypeInfo(ContratacionWS), ioDocument);

Funciono Bien, gracias por todo Egostar con tu ayuda pude comprender muchas cosas  :cheesy: 

  • 0




IP.Board spam blocked by CleanTalk.