2012-08-17 31 views
2

我以这种方式发送请求到服务器WSDLSoapClient的:: SomeFunction到SoapClient的:: __的SOAPCall( 'SomeFunction')

$soap = new SoapClient('WSDL_URI'); 
$soap->SomeFunction(array('Param1' => 123, 'Param2' => 456)); 

它工作正常,并__getLastRequest回报:

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://tempuri.org/"> 
    <SOAP-ENV:Body> 
     <ns1:SomeFunction> 
      <ns1:Param1>123</ns1:Param1> 
      <ns1:Param2>456</ns1:Param2> 
     </ns1:SomeFunction> 
    </SOAP-ENV:Body> 
</SOAP-ENV:Envelope> 

但如果我通过__soapCall呼叫SomeFunction, WSDL服务器停机并且不返回正确的响应。

$soap->__soapCall('SomeFunction', array('Param1' => 123, 'Param2' => 456)); 

__getLastRequest回报:

<?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:SomeFunction/> 
     <param1>123</param1> 
     <param2>456</param2> 
    </SOAP-ENV:Body> 
</SOAP-ENV:Envelope> 

你看,因为有不同要求,这是行不通的..

如何解决呢?

+0

我不知道你为什么要直接调用'__soapCall',因为你不需要这样做。如果您真的有用例,请向我们展示您的'__soapCall'代码 – ernie 2012-08-17 16:33:58

+0

@ernie:已编辑的问题。 – mrdaliri 2012-08-17 16:42:02

回答

6

由于PHP文档SoapClient::__soapCall所示,

$client = new SoapClient("some.wsdl"); 

    $client->SomeFunction($a, $b, $c); 
    // Or  
    $client->__soapCall("SomeFunction", array($a, $b, $c)); 

所以我觉得,如果你想打电话与__soapCall web服务,你应该作出这样的呼吁:

$soap->__soapCall('SomeFunction', array(array('Param1' => 123, 'Param2' => 456)));