2017-04-11 137 views
5

ben bir web hizmeti var ve PHP SOAP istemcisi kullanarak kendi operasyonlarından birini arıyorum ama olsun tüm bilmek istediğim bu ["any"]=> string(120) "falseObject reference not set to an instance of an object.Neden "falseObject referansı bir nesnenin örneğine ayarlanmadı" hatası alıyorsunuz? Benim webcoder bir operasyon çağırdığınızda yanlış bir şey benim kod var

olduğunu Çünkü web servisime bağlantımın% 100 çalıştığını düşünüyorum.

Oluşturduğum xml dizesinde bir sorun var mı?

operasyondur:

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

ve WSDL onun parametrelerinin tanımı yer almaktadır:

<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> 

Benim sabun ve PHP kodu takip ediyor:

<?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); 
?> 

SOAP isteği şu şekildedir:

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> 

SABUN cevabı:

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 çıktısı:

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

DÜZENLEME: Bana isteği boş gövdesini gösterir htmlentities($client->__getLastRequest()) kullanarak istek xml almaya çalıştı :

+0

belki nesne doesnt tepkisi 200 beri her şey doğru olduğu anlamına gelir xml yanlış – Rico

+0

kullanımını var ama u – Rico

+0

kuruldu olmadığını kontrol etmek xml – Rico

cevap

0

Büyük olasılıkla bir .NET hizmeti ile iletişim kuruyorsunuz. Bu hata mesajı temelde "değişken tanımsız" bir mesajdır.

WSDL dosyasında iki varlık içermesi gerektiği belirtiliyor: xmlIslem ve xmlYetki. Fakat iç yapıları tam olarak tanımlanmadı, "herhangi bir" olabilir. Bununla birlikte, bu, kaldırma web hizmetinin bazı veriler sağlamanızı beklemediği anlamına gelmez. Görünmediğiniz bazı verileri iletmeniz gerektiği gibi görünüyor, dolayısıyla hata.

Web servis sağlayıcısıyla iletişim kurar ve dokümanları veya özel istek örneklerini talep ederdim.

+0

bu satır strtoXmldocument ("". $ Kullanıcı adı. "". $ Password. "") -> documentElement); o.O – Rico

+0

@Rico XMLstj bir XMLDOM Obj ayrıştırmak gerekiyordu, ancak geçersiz XML çalışırken, işe yaramazsa, '