php – 接收空stdclass的SOAP客户端
发布时间:2020-12-13 16:16:07 所属栏目:PHP教程 来源:网络整理
导读:我不明白为什么我得到一个空的stdclass对象. 这是代码: $client = new Zend_Soap_Client('http://urltocodethatgenerateswsdl?wsdl',$options);$result = $client-sayHello(array( 'who' = 'Heidi'));Zend_Debug::dump($client-getLastResponse());Zend_Deb
我不明白为什么我得到一个空的stdclass对象.
这是代码: $client = new Zend_Soap_Client('http://urltocodethatgenerateswsdl?wsdl',$options); $result = $client->sayHello(array( 'who' => 'Heidi')); Zend_Debug::dump($client->getLastResponse()); Zend_Debug::dump($result); 这是我为lastResponse得到的: <?xml version="1.0" encoding="UTF-8"?> <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://urltocodethatgenerateswsdl"> <SOAP-ENV:Body> <ns1:sayHelloResponse> <return>Say Hello Heidi</return> </ns1:sayHelloResponse> </SOAP-ENV:Body> </SOAP-ENV:Envelope> 这是$result的转储 object(stdClass)#23 (0) {} 这是为什么?有人可以解释一下吗? 更新:添加了WSDL(由Zend使用AutoDiscovery自动生成) <definitions xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:tns="http://clxpreview.ch/index/soap" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap-enc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" name="Service_Soap" targetNamespace="http://clxpreview.ch/index/soap"> <types> <xsd:schema targetNamespace="http://urltocodethatgenerateswsdl"> <xsd:complexType name="User"> <xsd:all> <xsd:element name="username" type="xsd:string" nillable="true"/> <xsd:element name="password" type="xsd:string" nillable="true"/> </xsd:all> </xsd:complexType> </xsd:schema> </types> <portType name="Service_SoapPort"> <operation name="getSystemTime"> <documentation>getSystemTime</documentation> <input message="tns:getSystemTimeIn"/> <output message="tns:getSystemTimeOut"/> </operation> <operation name="sayHello"> <documentation>sayHello</documentation> <input message="tns:sayHelloIn"/> <output message="tns:sayHelloOut"/> </operation> <operation name="getUser"> <documentation>setUser</documentation> <input message="tns:getUserIn"/> <output message="tns:getUserOut"/> </operation> <operation name="setUser"> <documentation>setUser</documentation> <input message="tns:setUserIn"/> <output message="tns:setUserOut"/> </operation> </portType> <binding name="Service_SoapBinding" type="tns:Service_SoapPort"> <soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/> <operation name="getSystemTime"> <soap:operation soapAction="http://urltocodethatgenerateswsdl#getSystemTime"/> <input> <soap:body use="literal" namespace="http://urltocodethatgenerateswsdl"/> </input> <output> <soap:body use="literal" namespace="http://urltocodethatgenerateswsdl"/> </output> </operation> <operation name="sayHello"> <soap:operation soapAction="http://urltocodethatgenerateswsdl#sayHello"/> <input> <soap:body use="literal" namespace="http://urltocodethatgenerateswsdl"/> </input> <output> <soap:body use="literal" namespace="http://urltocodethatgenerateswsdl"/> </output> </operation> <operation name="getUser"> <soap:operation soapAction="http://urltocodethatgenerateswsdl#getUser"/> <input> <soap:body use="literal" namespace="http://urltocodethatgenerateswsdl"/> </input> <output> <soap:body use="literal" namespace="http://urltocodethatgenerateswsdl"/> </output> </operation> <operation name="setUser"> <soap:operation soapAction="http://urltocodethatgenerateswsdl#setUser"/> <input> <soap:body use="literal" namespace="http://urltocodethatgenerateswsdl"/> </input> <output> <soap:body use="literal" namespace="http://urltocodethatgenerateswsdl"/> </output> </operation> </binding> <service name="Service_SoapService"> <port name="Service_SoapPort" binding="tns:Service_SoapBinding"> <soap:address location="http://urltocodethatgenerateswsdl"/> </port> </service> <message name="getSystemTimeIn"/> <message name="getSystemTimeOut"> <part name="return" type="xsd:string"/> </message> <message name="sayHelloIn"> <part name="who" type="xsd:string"/> </message> <message name="sayHelloOut"> <part name="return" type="xsd:string"/> </message> <message name="getUserIn"> <part name="uid" type="xsd:int"/> </message> <message name="getUserOut"> <part name="return" type="tns:User"/> </message> <message name="setUserIn"> <part name="user" type="tns:User"/> </message> <message name="setUserOut"> <part name="return" type="xsd:string"/> </message> </definitions> 提前致谢 开 解决方法
我找到了它无法正常工作的原因.我不得不关闭配置中的缓存并添加一个选项,以便不在我发出的请求中缓存.
通过使用ini_set禁用缓存,或者通过修改php.ini来禁用缓存: ini_set("soap.wsdl_cache_enabled",0); 我还在我的请求中添加了以下选项参数: array('cache_wsdl' => WSDL_CACHE_NONE) 这是我在Stackoverflow上发现的一篇文章: (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |