gpt4 book ai didi

perl - 使用 SOAP 和 Perl 调用带参数的函数

转载 作者:行者123 更新时间:2023-12-04 15:29:59 31 4
gpt4 key购买 nike

我正在尝试通过 Perl 使用 SOAP 访问 Web 服务,并且在调用需要参数的服务函数时遇到问题。指示 SOAP 调用的 XSD 说,

<xs:complexType name="getVersion"> 
<xs:sequence/>
</xs:complexType>
<xs:complexType name="getVersionResponse">
<xs:sequence>
<xs:element minOccurs="0" name="return" type="xs:string"/>
</xs:sequence>
</xs:complexType>
...
<xs:complexType name="enumerateEntities">
<xs:sequence>
<xs:element name="entityId" type="xs:int"/>
<xs:element minOccurs="0" name="entityType" type="tns:entityType"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="enumerateEntitiesResponse">
<xs:sequence>
<xs:element maxOccurs="unbounded" minOccurs="0" name="return" nillable="true" type="xs:int"/>
</xs:sequence>
</xs:complexType>

根据该服务的文档,这两个功能的签名是:
String getVersion ()
int[] enumerateEntities (int entityId, EntityType entityType)

我可以调用第一个函数,它不需要输入参数,使用:
#!/usr/bin/perl

use SOAP::Lite;
my $uri = 'http://wsdl.mydomain.com/';
my $service = SOAP::Lite
-> uri($uri)
-> on_action(sub { sprintf '"Call by on_action: %s"',shift})
-> proxy('http://192.168.1.100:8688/MyService/services/MyService.MyServicePort/');

$method = SOAP::Data->name("MyService")->attr({xmlns => $uri});
$getVersion = SOAP::Data->name("getVersion")->attr({xmlns=>$uri});#line 11
my $theResult = $service->getVersion;

unless ($theResult->fault){ print "Version: "; print $theResult->result;}
else {print $theResult->faultstring;}

...但是我尝试(如下)通过更改第 11 行来调用带参数的函数是徒劳的。
...
@entityId = SOAP::Data->type('int')->name('entityId')->value(0);
@entityType = SOAP::Data->type('EntityType')->name('entityType')->value(NODE);
$enumerateEntities = SOAP::Data->name("enumerateEntities",@entityId,@entityType)->attr({xmlns=>$uri});
my $result2 = $service->enumerateEntities;
print $result2->result;

我做错了什么阻止我使用参数调用服务的函数?

编辑:
这是使用 SOAP::WSDL 的更新示例代码
#!/usr/bin/perl

use SOAP::WSDL;
use Data::Dumper;

my $service = SOAP::WSDL->new(
wsdl => 'http://192.168.1.100:8688/MyService/services/MyService.MyServicePort?wsdl',
outputhash => 1
);

最佳答案

使用SOAP::WSDL为了使用服务 wsdl,它还为您编码和(可选)到普通 perl 数据结构。强烈推荐的模块。

类似于以下内容:

use SOAP::WSDL;
use Data::Dumper;

my $soap = SOAP::WSDL->new(
wsdl => 'http://server/pathtoservice?WSDL',
outputhash => 1
);
my $res = $soap->call('method', { foo => 1, bar =>2 });
die $res->faultstring if $res->fault;
print Dumper($res->result);

关于perl - 使用 SOAP 和 Perl 调用带参数的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1748921/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com