基本SOAP :: Lite用法

时间:2017-06-30 15:13:01

标签: perl web-services wsdl soaplite

我在使用SOAP :: Lite的最基本示例时遇到了麻烦。

最初,我收到有关版本不匹配的错误,因此我根据this question添加了soapversion('1.2')

#!/usr/bin/perl -w
use strict;
use SOAP::Lite;
use Data::Dumper;

my $service = SOAP::Lite->service('https://www.w3schools.com/xml/tempconvert.asmx?WSDL');
$service->soapversion('1.2');
$service->serializer->soapversion('1.2');
my $result = $service->FahrenheitToCelsius('212');
print "result = " . Dumper $result;

我不再收到版本错误,而是获得:result = $VAR1 = 'Error';

1 个答案:

答案 0 :(得分:0)

我想你想要使用一些服务。如果是这样,您使用proxy方法而不是service。请参阅proxy文档:

  

代理是客户端要连接的服务器或端点。此方法允许设置端点,以及传输请求时传输对象可能需要的任何额外信息。

     

此方法实际上是SOAP :: Transport

的代理方法的别名

<强> f2c.pl

#!/usr/bin/perl -w
use strict;

# tracing for debugging purposes
# use SOAP::Lite +trace => "debug";
use SOAP::Lite;
use Data::Dumper;

my $service
    = SOAP::Lite->proxy('https://www.w3schools.com/xml/tempconvert.asmx?WSDL')
    # use on_action cb to override default SOAPAction value
    ->on_action(
    sub {
        return join '/', "https://www.w3schools.com/xml", $_[1];
    }
    );
my $result = $service->FahrenheitToCelsius('212');

# result is an instance of SOAP::SOM
# see https://metacpan.org/pod/distribution/SOAP-Lite/lib/SOAP/SOM.pod
$result->fault && die $result->faultstring;
print "result = " . Dumper $result->body;

perl f2c.pl显示错误:

result = $VAR1 = {
          'FahrenheitToCelsiusResponse' => {
                                           'FahrenheitToCelsiusResult' => 'Error'
                                         }
        };

FahrenheitToCelsius服务存在一般性问题。