Perl en Español

  1. Home
  2. Tutoriales
  3. Foro
  4. Artículos
  5. Donativos
  6. Publicidad
 
Índice general » Mundo Perl » Intermedio » Acceso a Web Services usando SOAP y WSDL Responder al tema
Nuevo tema


Página 2 de 2  [ 24 mensajes ]  Ir a página Anterior  1, 2
 
Nota 2007-10-30 03:53 @204

Perlero Nuevo
Registrado: 2007-10-25 04:33 @231
Mensajes: 12
Lo que ocurre es que las peticiones que se hacen al servidor se hacen por GET y yo necesito que se hagan por POST, porque si no, no me funcionan.

¿Alguna sugerencia?

¡Gracias!


Nota 2007-10-30 05:02 @251
Avatar de Usuario
Administrador
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España
Mensajes: 10216
Pero eso da igual... lo importante es ver la traza. Es decir, ¿tienes acceso al servidor donde se ejecuta el programa? En el log debe aparecer esa salida.

_________________
JF^D Perl programming


Nota 2007-10-30 08:09 @381

Perlero Nuevo
Registrado: 2007-10-25 04:33 @231
Mensajes: 12
En el log no aparecía nada. Lo solucionÉ definiendo el namespace a pelo. Seguí las instrucciones de una web de msdn:

http://msdn2.microsoft.com/en-us/library/ms995764.aspx

y esa forma de definir los parámetros, el target namespace y el soapaction funcionó ( es curioso que para el http analyzer que tengo lo toma como get aunque internamente hace POST ).

¡¡¡Gracias por la ayuda!!!

¡Saludos!


Nota 2007-10-30 08:27 @394
Avatar de Usuario
Administrador
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España
Mensajes: 10216
Sería interesante ver un ejemplo del código... por si alguien en el futuro le pasase lo mismo...

_________________
JF^D Perl programming


Nota 2007-10-31 11:25 @517

Perlero Nuevo
Registrado: 2007-10-25 04:33 @231
Mensajes: 12
Vale, en cuanto lo tenga terminado pongo el ejemplo para que pueda ayudar a quien tenga un problema similar a este. Lo que pasa ahora es que al hacer el Dumper de la información me aparecen datos tales como:

Código:
VAR1 = bless( {
                 '_name' => 'OperationResult',
                 '_uri' => 'http://....',
                 '_signature' => [],
                 '_value' => [
                               bless( {
                                        '_name' => 'Result',
                                        '_uri' => '...',
                                        '_signature' => [],
                                        '_value' => [
                                                      '001'
                                                    ],
                                        '_attr' => {}
                                      }, 'SOAP::Custom::XML::Data' ),
                               bless( {
                                        '_name' => 'Message',
                                        '_uri' => '...',
                                        '_signature' => [],
                                        '_value' => [
                                                      'hello World'
                                                    ],
                                        '_attr' => {}
                                      }, 'SOAP::Custom::XML::Data' ),

....


Entonces ahora lo que pasa es que quiero recorrer esta estructura de datos para extraer la información ( values ) de ciertos campos ( names ) . He probado a asignárselo a un vector y no funciona. Además, resulta que tengo más anidamientos a lo largo de la estructura. ¿Cómo puedo tratar de iterar de manera "sencilla", si es que se puede?

Gracias


Nota 2007-10-31 12:15 @552
Avatar de Usuario
Administrador
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España
Mensajes: 10216
Los 'bless' dan la pista de que son objetos. La forma más sencilla de extraer la información es usando los métodos propios de cada objeto.

Veo que son objetos SOAP::Custom::XML::Data, que están definidos como parte de la distribución SOAP::Lite.

En el hilo que te he comentado hay ejemplos de acceso, tanto desde el cliente como del servidor, a los datos que se intercambian.

Has puesto un ejemplo del cliente. ¿Puedes poner un ejemplo corto del servidor?

Otra cosa... ¿no estarás usando Windows y .Net?

_________________
JF^D Perl programming


Nota 2007-10-31 12:23 @557
Avatar de Usuario
Administrador
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España
Mensajes: 10216
¿Has mirado la carpeta de ejemplos de SOAP::Lite?

_________________
JF^D Perl programming


Nota 2007-11-02 03:16 @177

Perlero Nuevo
Registrado: 2007-10-25 04:33 @231
Mensajes: 12
Hola Explorer,

Efectivamente estoy usando Windows y .NET. Da igual entonces que te ponga un ejemplo del servidor puesto que esta en .NET (además, no tengo ahora mismo acceso a él). Estuve mirando los hilos que me dijiste, pero no me dan una idea clara de cómo acceder a ellos de manera "automática" es decir, con bucles y tal. De hecho, la estructura que tengo no me deja hacer ni siquiera un foreach. Las estructuras que hay en el ejemplo son además mucho más sencillas y no solo eso, en muchos casos tienes un XML, cosa que yo no tengo porque como ves, la respuesta no está en XML.

Miraré de nuevo los ejemplos de SOAP::Lite, pero sería bueno saber si hay alguna manera de convertir toda esta información en una estructura accesible por índice o algo así.


Nota 2011-06-01 17:15 @760

Perlero Frecuente
Registrado: 2010-01-26 08:36 @400
Mensajes: 155
Re: Acceso a Web Services usando SOAP y WSDL
Por si alguien mas pasa por aqui..


Syntax: [ Download ] [ Hide ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl -w
  2. use strict;
  3. use SOAP::Lite +trace => [qw(debug)];
  4.  
  5. my $soap = SOAP::Lite
  6.     # uri del web service
  7.     -> uri('http://localhost/')
  8.     # En $_[1] se encuentra el nombre del método del web service. Para .NET se necesita una concatenación
  9.     -> on_action( sub { join '/', 'http://localhost', $_[1] } )
  10.     # dónde está el web service
  11.     -> proxy('http://localhost/webservice.asmx');
  12.  
  13. my $method = SOAP::Data->name('NombreMetodo')
  14.     # esto añade un namespace tipo <NombreMetodo xmlns="http://localhost/">
  15.     ->attr({xmlns => 'http://localhost/'});
  16.  
  17. # No hay necesidad de indicar que son int o string
  18. my @params = ( SOAP::Data->name(param1 => 5),
  19.                SOAP::Data->name(param1 => 'aaabbbccc'),
  20.                SOAP::Data->name(param1 => 8 )
  21.              );
  22. # Envias los datos al web service..
  23. my $result = $soap->call($method => @params);
  24. if ($result->fault)
  25. {
  26.    print $result->faultstring;
  27. }
  28. else
  29. {
  30.    print $result->result;
  31.    # Para sacar los datos, pones el nombre de la etiqueta donde vienen los datos
  32.    my @nodes = $result->valueof('//EtiquetaRetorno');
  33.    # y luego lo recorres, nodo a nodo
  34.    foreach $node (@nodes){
  35.        # Value se supone el valor de retorno del webservice.
  36.        print $node->{'value'};
  37.    }
  38. }
  39.  




Saludos¡¡¡


Responder al tema  [ 24 mensajes ]  Ir a página Anterior  1, 2

Reglas del Foro
No puedes abrir nuevos temas en este Foro
No puedes responder a temas en este Foro
No puedes editar tus mensajes en este Foro
No puedes borrar tus mensajes en este Foro
No puedes enviar adjuntos en este Foro

Publicidad

Socializa

Síguenos por Twitter

Suscríbete GRATUITAMENTE al Boletín de Perl en Español

Saltar a:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Traducción al español por Huan Manwë para phpbb-es.com
phpBB SEO