我在嘗試使用PHP訪問我自己的PHP Soap服務時遇到問題。我爲客戶端和服務器使用Zend_Soap。Zend Soap客戶端返回null,並返回有效的XML最後一個響應
基本上,我從客戶端獲得的結果爲空。但是,如果我查看最後一個響應,它將包含預期的正確的XML。所以客戶端無法將xml轉換爲一個php對象(在我的測試用例中是一個簡單的int)以供使用。
我的WSDL看起來像這樣
<definitions name="SOAP_Model_soaphandler" targetNamespace="http://website.com/appldev/applications/public/SOAP/index/soap">
<types>
<xsd:schema targetNamespace="http://website.com/appldev/applications/public/SOAP/index/soap"/>
</types>
<portType name="SOAP_Model_soaphandlerPort">
<operation name="test">
<documentation>Returns list of all products in database</documentation>
<input message="tns:testIn"/>
<output message="tns:testOut"/>
</operation>
<operation name="test2">
<documentation>Adds new product to database</documentation>
<input message="tns:test2In"/>
<output message="tns:test2Out"/>
</operation>
</portType>
<binding name="SOAP_Model_soaphandlerBinding" type="tns:SOAP_Model_soaphandlerPort">
<soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
<operation name="test">
<soap:operation soapAction="http://website.com/appldev/applications/public/SOAP/index/soap#test"/>
<input>
<soap:body use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://website.com/appldev/applications/public/SOAP/index/soap"/>
</input>
<output>
<soap:body use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://website.com/appldev/applications/public/SOAP/index/soap"/>
</output>
</operation>
<operation name="test2">
<soap:operation soapAction="http://website.com/appldev/applications/public/SOAP/index/soap#test2"/>
<input>
<soap:body use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://website.com/appldev/applications/public/SOAP/index/soap"/>
</input>
<output>
<soap:body use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://website.com/appldev/applications/public/SOAP/index/soap"/>
</output>
</operation>
</binding>
<service name="SOAP_Model_soaphandlerService">
<port name="SOAP_Model_soaphandlerPort" binding="tns:SOAP_Model_soaphandlerBinding">
<soap:address location="http://website.com/appldev/applications/public/SOAP/index/soap"/>
</port>
</service>
<message name="testIn"/>
<message name="testOut">
<part name="return" type="xsd:int"/>
</message>
<message name="test2In">
<part name="id" type="xsd:int"/>
</message>
<message name="test2Out">
<part name="return" type="soap-enc:Array"/>
</message>
</definitions>
我的回答是這樣的
<env:envelope xmlns:enc="http://www.w3.org/2003/05/soap-encoding" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:ns1="http://website.com/appldev/applications/public/SOAP/index/soap" xmlns:env="http://www.w3.org/2003/05/soap-envelope">
<env:body xmlns:rpc="http://www.w3.org/2003/05/soap-rpc">
<ns1:testresponse env:encodingstyle="http://www.w3.org/2003/05/soap-encoding">
<rpc:result>return</rpc:result>
<return xsi:type="xsd:int">7</return>
</ns1:testresponse>
</env:body>
</env:envelope>
但
$result=$client->test();
var_dump($result);
輸出NULL。
任何想法?它看起來應該對我有用,但我不是肥皂客戶端如何工作的專家。也許這個命名空間有什麼問題?我真的不知道。它似乎應該工作正常。作爲參考,我遵循這個指南得到的東西和運行:
http://www.ibm.com/developerworks/webservices/library/x-zsoap/index.html
我想我可以永遠只是手動從XML響應,但我希望能找出爲什麼客戶端沒有做所以對我來說。
這個目錄在哪裏? – 2017-06-27 04:11:43