PDA

Ver la Versión Completa : Problema con xml en webservice


giulichajari
06-04-2014, 23:23:12
Bueno amigos soy nuevo en el tema de los webservices, encontre un tutorial para crearlo usando php en vez del servidor de windows, lo que me parecio conveniente porque se algo de php, y para no tener que instalar y configurar windows server en todas las maquinas de la empresa, pero bue ya fue.

El caso es que el xml me da el error:

Solo se admite un elemento de nivel superior en el xml

Aqui una cap:
http://i1187.photobucket.com/albums/z387/giulichajari/Dibujo_zps3a8452c3.jpg

No se bien donde esta el error.

Tengo un form con lo siguiente:

unit Unit2;

interface

uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Soap.InvokeRegistry, Vcl.StdCtrls,
Soap.Rio, Soap.SOAPHTTPClient;

type
TForm2 = class(TForm)
HTTPRIO1: THTTPRIO;
Button1: TButton;
EditId: TEdit;
EditNombre: TEdit;
Memo1: TMemo;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form2: TForm2;

implementation

{$R *.dfm}

uses listado;

procedure TForm2.Button1Click(Sender: TObject);
var
arr:ArregloDeEstructuras;
info:Estructura;
l, i:Integer;
begin

// Segun el rellenado llamamos a uno u otro
if (editId.Text <> '') then begin
arr := (HTTPRIO1 as Consulta_de_usuariosPortType).ConsultaUsuario(StrToInt(editId.text));
end
else begin
arr := (HTTPRIO1 as Consulta_de_usuariosPortType).ConsultaUsuarios(editNombre.text);
end;

l := Length(arr);
Memo1.Lines.Clear;

for i := 0 to (l - 1) do begin
info := arr[i];

Memo1.Lines.Add('Id: ' + IntToStr(info.Id));
Memo1.Lines.Add('Nombre: ' + info.Nombre);
Memo1.Lines.Add('Apellidos: ' + info.Apellidos);
Memo1.Lines.Add('Teléfono(ext): ' + info.Telefono + '-' + IntToStr(info.Extension));
Memo1.Lines.Add('Departamento: ' + info.Departamento);
Memo1.Lines.Add('Email: ' + info.EMail);
Memo1.Lines.Add('----------------------------------');

end;


end;

end.
En este archivo incluyo una unidad creada con wsdl importer la de listado.pas. La idea fue extraida de este tuto pero decidi hacer un tema:

http://neftali.clubdelphi.com/?p=3335

Saludos

Neftali [Germán.Estévez]
07-04-2014, 09:58:20
Hola.
Hay que decir que en los ejemplos que utilicé no todas las versiones de delphi me generaban correctamente los ficheros con el WSDL.
Podrías subir los ficheros que estás utilizando (en un ZIP) de esa forma si quieres podemos probarlos.

El PHP y el WSDL generado (además de PAS que ya has subido).

¿Con qué versión los estás generando?

Un saludo.

giulichajari
07-04-2014, 15:27:23
Hay te mando los 2 archivos, el de php y el generado a partir del wsdl.
Trabajo en Delphi XE2, sino me podrias decir cual de las opciones del tutorial podria utilizar?
Gracias por tu ayuda

giulichajari
08-04-2014, 13:57:01
Bueno ahora cambio la leyenda que aparece en el error:

http://i1187.photobucket.com/albums/z387/giulichajari/Dibujo_zpsd414a4c8.jpg

Y el archivo php lo descargue de tu web, lo unico que cambie son nlos parametros del servidor y la bd. No quiero descargar delphi xe5 porque es muy pesado. Muchas gracias

giulichajari
12-04-2014, 14:54:17
Hola de vuelta sobre todo a NEftali, la solucion la encontre en esta pagina:

http://stackoverflow.com/questions/18779953/how-to-deal-with-array-complextype-in-nusoap

Comentando una linea ya logre que me devuelva los datos insertando el id

Neftali [Germán.Estévez]
14-04-2014, 09:10:49
^\||/ GRracias por el feedback.
Siento no haber podido echarle un vistazo antes.

Un saludo.

giulichajari
14-04-2014, 17:07:12
^\||/ GRracias por el feedback.
Siento no haber podido echarle un vistazo antes.

Un saludo.

No hay problema Neftali, muy bueno el tuto. Ahora no sabes de algun tutorial o de que forma consumirlo a traves de la web, porque probe en otra maquina y no puedo, obviamente hay que tener una ip fija, abrir los puertos del servidor, pero ademas modificar la ruta del webservice en vez de localhost, poner la ip. en fin como se hace eso, porque en el tutorial tuyo no esta esa parte, gracias igual.