2017-04-11 9 views
5

मैं एक वेब सेवा है और मैं अपने परिचालन PHP में सोप ग्राहक का उपयोग कर में से एक बोल रहा हूँ, लेकिन सभी मैं इस ["any"]=> string(120) "falseObject reference not set to an instance of an object.मुझे यह त्रुटि क्यों मिलती है "falseObject संदर्भ किसी ऑब्जेक्ट के उदाहरण पर सेट नहीं है।" जब मैं अपने वेब सेवा में एक ऑपरेशन फोन

मैं जानना चाहता हूँ है वहाँ मेरे कोड में कुछ भी गलत है क्योंकि मुझे विश्वास है कि वेब सेवा से मेरा कनेक्शन% 100 काम कर रहा है।

क्या मैं बना रहा हूँ xml स्ट्रिंग में कुछ गलत है? है

<wsdl:operation name="XmlIslet"> 
    <wsdl:input message="tns:XmlIsletSoapIn"/> 
    <wsdl:output message="tns:XmlIsletSoapOut"/> 
</wsdl:operation> 

और WSDL में अपनी मापदंडों का विवरण::

<wsdl:types> 
    <s:schema elementFormDefault="qualified" targetNamespace="http://tempuri.org/"> 
     <s:element name="XmlIslet"> 
      <s:complexType> 
       <s:sequence> 
        <s:element minOccurs="0" maxOccurs="1" name="xmlIslem"> 
         <s:complexType> 
          <s:sequence> 
           <s:any/> 
          </s:sequence> 
         </s:complexType> 
        </s:element> 
        <s:element minOccurs="0" maxOccurs="1" name="xmlYetki"> 
         <s:complexType> 
          <s:sequence> 
           <s:any/> 
          </s:sequence> 
         </s:complexType> 
        </s:element> 
       </s:sequence> 
      </s:complexType> 
     </s:element> 
     <s:element name="XmlIsletResponse"> 
      <s:complexType> 
       <s:sequence> 
        <s:element minOccurs="0" maxOccurs="1" name="XmlIsletResult"> 
         <s:complexType mixed="true"> 
          <s:sequence> 
           <s:any/> 
          </s:sequence> 
         </s:complexType> 
        </s:element> 
       </s:sequence> 
      </s:complexType> 
     </s:element> 
    </s:schema> 
</wsdl:types> 

मेरे साबुन और PHP कोड पीछा कर रहा है:

ऑपरेशन है

<?php 
$username = "username"; 
$password = "password"; 
$xmlString = "<Firmalar></Firmalar>"; 

function strtoXmldocument($str) 
{ 
    $dom = new DOMDocument(); 
    $str1 = $str; 
    return $dom->loadXML($str1); 
} 

function stringToDataset($xmlString, $username, $password)  
{      
    $client = new SoapClient('http://1.1.1.1/WSTEST/Service.asmx?WSDL'); 

    $response = $client->XmlIslet(strtoXmldocument($xmlString)->documentElement, 
strtoXmldocument("<Kullanici><Adi>" .$username. "</Adi><Sifre>" .$password. "</Sifre></Kullanici>")->documentElement); 

var_dump($response); 
} 

stringToDataset($xmlString, $username, $password); 
?> 

एसओएपी अनुरोध निम्नानुसार है:

POST /WSTEST/Service.asmx HTTP/1.1 
Host: 1.1.1.1 
Content-Type: application/soap+xml; charset=utf-8 
Content-Length: length 

<?xml version="1.0" encoding="utf-8"?> 
<soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope"> 
    <soap12:Body> 
    <XmlIslet xmlns="http://tempuri.org/"> 
     <xmlIslem>xml</xmlIslem> 
     <xmlYetki>xml</xmlYetki> 
    </XmlIslet> 
    </soap12:Body> 
</soap12:Envelope> 

सोप प्रतिक्रिया:

HTTP/1.1 200 OK 
Content-Type: application/soap+xml; charset=utf-8 
Content-Length: length 

<?xml version="1.0" encoding="utf-8"?> 
<soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope"> 
    <soap12:Body> 
    <XmlIsletResponse xmlns="http://tempuri.org/"> 
     <XmlIsletResult>xml</XmlIsletResult> 
    </XmlIsletResponse> 
    </soap12:Body> 
</soap12:Envelope> 

vardump उत्पादन होता है:

usernamepasswordobject(stdClass)#2 (1) { ["XmlIsletResult"]=> object(stdClass)#3 (1) { ["any"]=> string(120) "falseObject reference not set to an instance of an object." } } 

संपादित करें: मैं जो मुझे मेरे अनुरोध के एक खाली शरीर से पता चलता htmlentities($client->__getLastRequest()) का उपयोग कर अनुरोध एक्सएमएल प्राप्त करने की कोशिश :

========= REQUEST ========== 
string(292) 
"<?xml version="1.0" encoding="UTF-8"?> 
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://tempuri.org/"> 
<SOAP-ENV:Body> 
<ns1:XmlIslet> 
<ns1:xmlIslem/> 
<ns1:xmlYetki/> 
</ns1:XmlIslet> 
</SOAP-ENV:Body> 
</SOAP-ENV:Envelope> " 
+0

शायद वस्तु नहीं करता है एक्सएमएल में – Rico

+0

उपयोग मौजूद यदि एक्सएमएल गलत तरीके से – Rico

+0

गठन किया गया था तो इसका मतलब है के बाद से प्रतिक्रिया 200 है सब कुछ उचित है की जाँच करने के लेकिन यू आर वस्तु के लिए एक संपत्ति है कि रिक्त है – Rico

उत्तर

0

आप शायद .NET सेवा से संचार कर रहे हैं। यह त्रुटि संदेश मूल रूप से एक "परिवर्तनीय अपरिभाषित" संदेश है।

डब्ल्यूएसडीएल फ़ाइल कहती है, आपके अनुरोध में दो इकाइयां होनी चाहिए: xmlIslem और xmlYetki। लेकिन उनकी आंतरिक संरचना उचित रूप से परिभाषित नहीं है, यह "कोई भी" हो सकती है। हालांकि, इसका मतलब यह नहीं है कि हटाई गई वेब सेवा से आप कुछ डेटा प्रदान करने की अपेक्षा नहीं करते हैं। ऐसा लगता है कि आपको कुछ डेटा पास करने की आवश्यकता है, जो आप नहीं करते हैं, इसलिए त्रुटि।

मैं वेब सेवा प्रदाता से संपर्क करता हूं और दस्तावेज़ीकरण या विशिष्ट अनुरोध उदाहरणों का अनुरोध करता हूं।

+0

यह लाइन strtoXmldocument क्या करती है (""। $ उपयोगकर्ता नाम। ""। $ पासवर्ड। "") -> दस्तावेज़ एलिमेंट); ओ.ओ – Rico

+0

@ रिको को एक्सएमएलडीओएम ओबीजे में एक्सएमएलस्ट्रिंग को पार्स करना है, हालांकि इसमें अमान्य एक्सएमएल है, लेकिन यह काम नहीं करेगा, यह मानकों के लिए '

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

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