Tôi đang cố truy cập dịch vụ web bằng SOAP thông qua Perl và đang gặp sự cố khi gọi các chức năng của dịch vụ yêu cầu tham số. XSD rằng mệnh lệnh cuộc gọi SOAP nói,Chức năng gọi với các tham số sử dụng SOAP với Perl
<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>
Theo các tài liệu cho các dịch vụ, chữ ký cho hai chức năng là:
String getVersion()
int[] enumerateEntities (int entityId, EntityType entityType)
tôi có thể gọi hàm đầu tiên, đòi hỏi không có tham số đầu vào, sử dụng:
#!/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;}
... nhưng nỗ lực của tôi (bên dưới) khi gọi hàm có thông số bằng cách thay đổi dòng 11 là vô ích.
...
@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;
Tôi đang làm gì sai khiến tôi không thể gọi các chức năng của dịch vụ có thông số?
Edit: Dưới đây là các mẫu mã được cập nhật bằng cách sử dụng 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
);
Tôi làm điều này nhưng tôi nói, "Không thể nhập namespace ... mà không uri cơ sở. Sử dụng> parse_uri < or > set_uri <để thiết lập một. Tôi có uri từ ví dụ của tôi ở trên. Làm thế nào để cài đặt nó sử dụng SOAP :: WSDL? –
Tôi đang gặp vấn đề tương tự, và tôi đã thử giải pháp này, và các tham số không làm cho nó thông qua yêu cầu gửi đi. Http://stackoverflow.com/questions/1765248 – aidan
Bạn có thể cung cấp dịch vụ và các url WSDL để thử nghiệm? Các công trình trên cho tôi đối với nhiều dịch vụ. –