2012-01-19 23 views
5

मैं एक PHP स्क्रिप्ट लिखने का प्रयास कर रहा हूं जो हमारे साइटमैक्स इंटरफ़ेस के लिए SOAP क्लाइंट से कनेक्ट होगा। नीचे दिए गए कोड के साथ मैं उपलब्ध कार्यों की एक सूची मुद्रित करने में सक्षम हूं, हालांकि जब मैं किसी भी फ़ंक्शन को आज़माता हूं और कॉल करता हूं तो मुझे निम्न त्रुटि मिल रही है।PHP घातक त्रुटि: "संदेश पर निर्दिष्ट SOAP क्रिया,", HTTP SOAP क्रिया से मेल नहीं खाती है "

<?php 

$client = new SoapClient('http://domain.com/SightMaxWebServices/SightMaxWebService.svc?wsdl', array('soap_version' => SOAP_1_2)); 

var_dump($client->__getFunctions()); 

$result = $client->__call("GetSiteSummary", array()); 

echo "<pre>"; 
print_r($result); 
echo "</pre>"; 

?> 

Fatal error: Uncaught SoapFault exception: [s:Sender] The SOAP action specified on the message, '', does not match the HTTP SOAP Action, 'SmartMax.SightMax.Agent.Operator/IRemotedWebsiteAdministrator/GetSiteSummary'. in test2.php:7 Stack trace: #0 test2.php(7): SoapClient->__call('GetSiteSummary', Array) #1 {main} thrown in test2.php on line 7 

मैं पिछले कुछ दिनों के लिए इस त्रुटि शोध किया गया है और मैं अलग संभावित समस्याओं को बताते हुए लेख पढ़े हैं। जो मैं समझता हूं उससे यह त्रुटि होती है क्योंकि SOAP क्लाइंट wsHttp बाइंडिंग के लिए कॉन्फ़िगर किया गया है और या तो PHP के लिए SOAP क्लाइंट में निर्माण wsHttp बाइंडिंग का समर्थन नहीं करता है या मुझे विशेष रूप से SOAP कार्रवाई निर्दिष्ट करने की आवश्यकता है।

क्या कोई इस पर मेरे लिए कोई प्रकाश डाल सकता है? कृपया ध्यान रखें, जबकि मैं एसओएपी के साथ काम कर रहे PHP के साथ छिपा हूं, मेरे लिए नया है इसलिए कदमों से कदम बहुत उपयोगी हैं।

अग्रिम में धन्यवाद।

+1

हेवी आप 'नया सोप क्लाइंट' में संस्करण पैरामीटर को छोड़ने का प्रयास किया? साबुन 1.2 एसओएपी एक्शन हेडर का उपयोग नहीं करता है, 1.1 करता है। यह हो सकता है कि सर्वर केवल 1.1 समझता है? –

+1

जब मैं SOAP_1_2 संस्करण पैरामीटर को हटाता हूं तो मुझे एक अलग त्रुटि मिलती है घातक त्रुटि: Uncaught SoapFault अपवाद: [HTTP] संदेश को संसाधित नहीं कर सकता क्योंकि सामग्री प्रकार 'text/xml; charset = utf-8 'अपेक्षित प्रकार नहीं था' एप्लिकेशन/साबुन + xml; charset = utf-8 '। test2.php में: 5 स्टैक ट्रेस: ​​# 0 [आंतरिक फ़ंक्शन]: सोप क्लाइंट -> __ doRequest ('__ कॉल (' GetSiteSummary ', Array) # 2 {main}/var/www/tools/html/whoonchat/test2 में फेंक दिया गया है। लाइन 5 –

उत्तर

1

आपको एसओएपी एक्शन देना चाहिए। चूंकि आप इसे SoapClient के प्रारंभ में शामिल नहीं करते हैं, इसलिए यह वेब सेवा के SOAP एक्शन से मेल नहीं खाता है। सुनिश्चित करें कि आप जानते हैं कि एसओएपी एक्शन कनेक्ट करने से पहले क्या है।

इस विषय पर अधिक के लिए http://www.oreillynet.com/xml/blog/2002/11/unraveling_the_mystery_of_soap.html पढ़ें।

+0

पर php मैंने लेख के माध्यम से पढ़ा है और मुझे अभी भी समझ में नहीं आ रहा है। मैं अपनी स्क्रिप्ट में एसओएपी कार्रवाई को स्पष्ट रूप से कैसे बता सकता हूं? –

+0

मुझे नहीं पता, मैंने आपको अभी बताया है कि आपको यह बताने चाहिए कि आपको क्या पता होना चाहिए एसओएपी एक्शन होना चाहिए। मुझे खेद है। – Leonard

15

डब्ल्यूसीएफ एसओएपी लिफाफे में कार्रवाई की तलाश में प्रतीत होता है।

$actionHeader = new SoapHeader('http://www.w3.org/2005/08/addressing', 
           'Action', 
           'http://soapaction.that.was.in.the.wsdl'); 
$client->__setSoapHeaders($actionHeader); 

आप तीसरे पैरामीटर बदल सकते हैं और जोड़ देते हैं $ ग्राहक के अपने इन्स्टेन्शियशन और __call() के बीच यह त्रुटि स्पष्ट करना चाहिए (और संभवतः पर लाना है तो: आप PHP के SoapClient साथ इस तरह से अपने कॉल में जोड़ सकते हैं नए लोगों को, सोप मज़ा, __getLastRequest(), __getLastResponseHeaders(), और __getLastResponse() फ़ंक्शन बहुत करता है, तो देखने के लिए आसान नहीं है?)

इसके अलावा FYI करें, सिर्फ इस एक ही समस्या के माध्यम से चला, मैं __getLastRequestHeaders पाया() जो मैं कोशिश कर रहा था उसका कोई प्रभाव पड़ा (ध्यान दें कि आपको काम करने के लिए अपने सोप क्लाइंट विकल्पों में "ट्रेस" => "1" जोड़ना होगा।)

+2

यह बहुत अच्छा काम करता है। यदि आपको एक्शन नहीं मिल रहा है, तो यह निम्नलिखित विशेषता के साथ wsdl में है:

+0

महान उत्तर! बहुत बहुत धन्यवाद। –

+0

इस उत्तर ने मेरा दिन बचाया! इसके अलावा, यह उत्तर बहुत उपयोगी था: http://stackoverflow.com/ए/32641267/1795351 –

संबंधित मुद्दे