我希望使用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
,而是由于连接成功传递。
答案 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返回它们的方式。