2012-08-17 43 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)));