如何使用Perl访问Web服务方法?

时间:2011-04-01 11:10:10

标签: perl

我希望使用Perl执行两个Web服务方法。我有这个Web服务的URL,它有一个.svc扩展名。我还有方法名称,它们作为参数接收的内容以及它们返回的内容。我该怎么做?如果你能够详细说明,那就太好了。

我试过了:

use SOAP::Lite;
use SOAP::TRANSPORT;

$client = SOAP::Lite->new();
$client->SOAP::TRANSPORT::HTTP('http://perl-server/perl.svc');
print $client->method_1("hi");
print $client->result();

但它始终返回1,我需要从method_1得到答案“true”。我认为它不会从此方法返回1,而是由于连接成功传递。

1 个答案:

答案 0 :(得分:0)

我也花了一段时间才得到这个:

WSDL - Web服务定义(lang)页面,其中SOAP可以读取服务器上可用的所有函数/类的标准格式以及如何与它们通信。基本上是一个头文件。

URI - 一个类定义页面,以便您可以编写SOAP服务器类,然后将其提供给100个人,每个人都可以指向相同的定义文件,因此当您更新所有人时,SOAP客户不必更新任何内容

PROXY - URI类的实际实现,通常用wsdl编写。这是您实际连接和交谈的页面。

这就是为什么您需要一个Proxy和一个URI来连接到SOAP服务 - 定义和实际服务器。至于perl代码,

my $cli = SOAP::Lite->proxy('proxyurl')->uri('uriurl');

my $call_return_obj = $cli->somefunc('hello');
if ($call_return_obj->faultstring ne '')
{
   print "somethin bad happened: ".$call_return_obj->faultstring."\n";
}
else
{
   my $resultstruct = $call_return_obj->results;
}

然后它变得更加棘手。嵌套类型表示为指向数组/哈希的指针,其中填充了更多其他数组或哈希的指针,只有最后一级数组/哈希可以包含实际值。这也是从SOAP :: Lite返回它们的方式。