Próbuję uzyskać dostęp do usługi sieci Web przy użyciu protokołu SOAP przez Perl i mam problemy z wywołaniem funkcji usługi, które wymagają parametrów. XSD dyktuje wywołanie SOAP mówiWywołanie funkcji za pomocą parametrów przy użyciu protokołu SOAP z 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>
Zgodnie z docs dla służby, podpisy dla dwóch funkcji są:
String getVersion()
int[] enumerateEntities (int entityId, EntityType entityType)
jestem w stanie połączyć się z pierwszą funkcję, która wymaga bez parametrów wejściowych, używając:
#!/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;}
... ale moja próba (poniżej) wywołania funkcji z parametrami poprzez zmianę linii 11 była daremna.
...
@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;
Co robię źle uniemożliwiając mi wywoływanie funkcji usługi za pomocą parametrów?
Edit: Oto zaktualizowana przykładowy kod z użyciem mydła :: 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
);
mogę to zrobić, ale mi powiedziano, „Nie można zaimportować nazw ... bez podstawowego URI. Użyj> parse_uri < or > set_uri
Mam podobny problem i próbowałem tego rozwiązania, a parametry po prostu nie trafiają do wychodzących żądań http://stackoverflow.com/questions/1765248 – aidan
Czy możesz dostarczyć usługi i adresy URL WSDL do testowania? Powyższe działa dla mnie przeciwko wielu usługom –