![Nota Nota](https://perlenespanol.com/foro/styles/prosilver/imageset/icon_post_target.gif)
Un ejemplo que me he hecho esta tarde...
De la parte de servidor:
Este servidor lo coloco como CGI, por ser lo más rápido para probar.
Y como cliente:
El resultado es:
Fíjate que en el cliente he colocado como uri el nombre base del módulo que pido, y como proxy, el cgi que se va a ejecutar en la petición.
Con un WSDL, como lo tienes tu, el procedimiento sería casi el mismo, cambiando 'uri' por 'service' (creo, no lo he probado).
De la parte de servidor:
Using perl Syntax Highlighting
#!/usr/bin/perl
#
# Salida de información del muelle
# a través de SOAP
#
# Joaquin Ferrero, Julio 2006
package Muelle;
sub consultaUnManifiestoResponse {
my $self = shift;
my %datos = (
nTrans => 465,
cTransp => 'HYBU',
idTransp => 7116834,
nomBuque => 'ARGOSY',
numViaje => '416 SB MEX',
fecEstimada => '15/12/2004 12:00:00 AM',
tipoOper => 1,
lineaNaviera=> 'NAVIERA VICANE',
fecRecibe => '14/12/2004 4:09:46 PM',
cuAduana => 53,
cuPais => 'ATG',
cuPuerto => 'PMS',
cuEntidadMan=> 1158,
casos => '',
);
# Como ejemplo, le añadimos los parámetros pasados por el usuario
my %parametros = %{shift()};
@datos{keys %parametros} = @parametros{keys %parametros};
return \%datos;
}
package main;
use SOAP::Transport::HTTP;
SOAP::Transport::HTTP::CGI
# El muelle se encarga de todo...
-> dispatch_to('Muelle')
-> handle;
#
# Salida de información del muelle
# a través de SOAP
#
# Joaquin Ferrero, Julio 2006
package Muelle;
sub consultaUnManifiestoResponse {
my $self = shift;
my %datos = (
nTrans => 465,
cTransp => 'HYBU',
idTransp => 7116834,
nomBuque => 'ARGOSY',
numViaje => '416 SB MEX',
fecEstimada => '15/12/2004 12:00:00 AM',
tipoOper => 1,
lineaNaviera=> 'NAVIERA VICANE',
fecRecibe => '14/12/2004 4:09:46 PM',
cuAduana => 53,
cuPais => 'ATG',
cuPuerto => 'PMS',
cuEntidadMan=> 1158,
casos => '',
);
# Como ejemplo, le añadimos los parámetros pasados por el usuario
my %parametros = %{shift()};
@datos{keys %parametros} = @parametros{keys %parametros};
return \%datos;
}
package main;
use SOAP::Transport::HTTP;
SOAP::Transport::HTTP::CGI
# El muelle se encarga de todo...
-> dispatch_to('Muelle')
-> handle;
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4
Y como cliente:
Using perl Syntax Highlighting
#!/usr/bin/perl -l
use SOAP::Lite;
my $soap = SOAP::Lite->new(
uri => 'http://localhost/Muelle',
proxy => 'http://www.joaquinferrero.com/~atari/cgi-bin/muelle.pl',
);
my $response = $soap->consultaUnManifiestoResponse ({
barco => 'ARGOSY',
manif => '465',
usuario => 'API940504EPA',
});
my %resultado = %{$response->result};
foreach my $campo ( keys %resultado ) {
print "\t$campo\t$resultado{$campo}";
}
use SOAP::Lite;
my $soap = SOAP::Lite->new(
uri => 'http://localhost/Muelle',
proxy => 'http://www.joaquinferrero.com/~atari/cgi-bin/muelle.pl',
);
my $response = $soap->consultaUnManifiestoResponse ({
barco => 'ARGOSY',
manif => '465',
usuario => 'API940504EPA',
});
my %resultado = %{$response->result};
foreach my $campo ( keys %resultado ) {
print "\t$campo\t$resultado{$campo}";
}
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4
El resultado es:
Using text Syntax Highlighting
fecEstimada 15/12/2004 12:00:00 AM
manif 465
cuAduana 53
cuPais ATG
cuPuerto PMS
casos
idTransp 7116834
nomBuque ARGOSY
numViaje 416 SB MEX
cTransp HYBU
lineaNaviera NAVIERA VICANE
nTrans 465
usuario API940504EPA
barco ARGOSY
cuEntidadMan 1158
tipoOper 1
fecRecibe 14/12/2004 4:09:46 PM
manif 465
cuAduana 53
cuPais ATG
cuPuerto PMS
casos
idTransp 7116834
nomBuque ARGOSY
numViaje 416 SB MEX
cTransp HYBU
lineaNaviera NAVIERA VICANE
nTrans 465
usuario API940504EPA
barco ARGOSY
cuEntidadMan 1158
tipoOper 1
fecRecibe 14/12/2004 4:09:46 PM
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4
Fíjate que en el cliente he colocado como uri el nombre base del módulo que pido, y como proxy, el cgi que se va a ejecutar en la petición.
Con un WSDL, como lo tienes tu, el procedimiento sería casi el mismo, cambiando 'uri' por 'service' (creo, no lo he probado).