• Publicidad

Problema con ejemplo SOAP::Lite y autodispatch

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

Problema con ejemplo SOAP::Lite y autodispatch

Notapor solano_al » 2011-07-04 07:00 @333

Hola:

Soy nuevo por el foro y en el mundo de Perl, estoy haciendo ejemplos para usar el módulo SOAP::Lite, y me he encontrado con el siguiente problema:

Tengo un servidor con una clase Temperatura con orientación a objetos:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. use SOAP::Transport::HTTP;
  2.  
  3. #use Temperatures;
  4.  
  5. package servidor;
  6.  
  7. my $daemonio = SOAP::Transport::HTTP::Daemon->new(
  8.     LocalAddr => 'localhost',
  9.     LocalPort => 8045
  10. )->dispatch_to( '', 'Temperatures' );
  11.  
  12. package Temperatures;
  13.  
  14. sub f2c {
  15.     my ( $class, $f ) = @_;
  16.     return 5 / 9 * ( $f - 32 );
  17. }
  18.  
  19. sub c2f {
  20.     my ( $class, $c ) = @_;
  21.     return 32 + $c * 9 / 5;
  22. }
  23.  
  24. sub new {
  25.     my $self = shift;
  26.     my $class = ref($self) || $self;
  27.     bless { _temperature => shift } => $class;
  28. }
  29.  
  30. sub as_fahrenheit {
  31.     return shift->{_temperature};
  32. }
  33.  
  34. sub as_celsius {
  35.     return 5 / 9 * ( shift->{_temperature} - 32 );
  36. }
  37.  
  38. sub prueba {
  39.     return 10;
  40. }
  41.  
  42. $daemonio->handle();
  43.  
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4


Y por otro lado tengo un cliente con autodispatch, que es el siguiente:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. use strict;
  2. use SOAP::Lite +autodispatch =>
  3.     uri   => 'http://localhost:8044/Temperatures',
  4.     proxy => 'http://localhost:8044/';
  5.  
  6. print Temperatures->c2f(22), "\n";
  7.  
  8. my $temperatures = Temperatures->new();
  9. print $temperatures;
  10.  
  11. print $temperatures->as_fahrenheit();
  12.  
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


El problema es que cuando hago $temperatures->as_fahrenheit() me da el siguiente error:

Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
Not a HASH reference at C:/Perl64/site/lib/SOAP/Lite.pm line 3755.
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4



Y no sé por qué pasa. Si alguien tiene alguna solución...

¡¡Gracias y saludos!!
solano_al
Perlero nuevo
Perlero nuevo
 
Mensajes: 2
Registrado: 2011-07-03 15:44 @697

Publicidad

Re: Problema con ejemplo SOAP::Lite y autodispatch

Notapor explorer » 2011-07-04 12:25 @559

Bienvenido a los foros de Perl en español, solano_al.

¿Puedes decirnos de dónde has copiado el código?

Yo juraría que la línea 42 debería estar en la 11...
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Problema con ejemplo SOAP::Lite y autodispatch

Notapor solano_al » 2011-07-05 02:18 @137

La verdad es que sí, ¡je,je,je!

Pero bueno, el código lo he sacado de la página principal de la quick guide de SOAP::Lite


http://guide.soaplite.com/#passing%20values

El problema está en que en esa guía, dice que se pueden pasar referencias a objetos por SOAP,
pero probando el código, una vez que creo el objeto con new(), no puedo acceder a sus atributos, porque me da una referencia a la hash no válida.

Y no sé por qué, porque con autodispatch esto de pasar referencias a objetos debería funcionar, ¿¿¿no???


Gracias por contestar tan rápido, ¡¡¡un saludo!!!
solano_al
Perlero nuevo
Perlero nuevo
 
Mensajes: 2
Registrado: 2011-07-03 15:44 @697

Re: Problema con ejemplo SOAP::Lite y autodispatch

Notapor explorer » 2011-07-05 12:47 @574

Por lo que he visto, los cambios primeros que hay que hacer son:

* la línea 42 debe estar en la 11. Con ello, arrancas un servicio SOAP en modo dæmon que queda escuchando en el puerto indicado.

En la 41 (que no hay nada), poner
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. 1;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


En el cliente, como tienes activado el autodispatch, debes cambiar la línea
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. print Temperatures->c2f(22), "\n";
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


por
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. print c2f(22), "\n";
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Las líneas 8 a 11 son otra forma de acceder a Temperatures. Hay varias formas. Lo normal sería no mezclarlas.

Un detalle importante... el servidor está escuchando en el puerto 8045, pero el cliente se conecta al 8044. Yo entiendo que eso está mal: deberían ser el mismo puerto en los dos extremos.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España


Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 27 invitados