के साथ SOAP का उपयोग करके पैरामीटर के साथ कॉलिंग फ़ंक्शंस मैं पर्ल के माध्यम से 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;
मैं गलत क्या कर रहा हूं जो मुझे पैरामीटर के साथ सेवा के कार्यों को कॉल करने से रोक रहा है?
संपादित करें: यहाँ सोप :: डबल्यूएसडीएल
#!/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
);
का उपयोग कर के साथ अद्यतन नमूना कोड
मैं यह कर, लेकिन बताया गया है, "नाम स्थान ... आयात नहीं कर सकते आधार uri बिना। एक सेट करने के लिए> parse_uri < or > set_uri <का प्रयोग करें। मैं ऊपर मेरी उदाहरण से uri की है। मैं कैसे सोप का उपयोग कर यह सेट करना :: डब्ल्यूएसडीएल? –
मुझे एक ही समस्या है, और मैंने इस समाधान की कोशिश की है, और पैरामीटर इसे आउटगोइंग अनुरोध के माध्यम से नहीं बनाते हैं। Http://stackoverflow.com/questions/1765248 – aidan
क्या आप परीक्षण के लिए सेवा और डब्ल्यूएसडीएल यूआरएल की आपूर्ति करें? उपरोक्त कई सेवाओं के खिलाफ मेरे लिए काम करता है। –