2013-01-03 189 views
0

我試圖解決SoapClient似乎沒有將參數插入到SOAP請求中的問題。PHP&SoapClient:SOAP請求中缺少的參數

簡單測試未能在與網站相同的服務器上運行,即Windows 8 Server和IIS 7.1上的PHP 5.3.13。這一直在兩天前最近纔開始工作,但現在失敗了。我不知道更新以外的服務器安裝有任何更改。

function simpleTest(){ 

    $client = new SoapClient("http://server-sql:78/PCIWCTest/Service1.svc?wsdl", array("trace" => 1)); 

    $result = $client->__soapCall("GetData", 
    array('GetData'=> array('parameters'=> 'Hello')), 
    array('soapaction' => 'http://server-sql:78/PCIWCTest/GetData')); 

    $requXML = $client->__getLastRequest(); 
    $respXML = $client->__getLastResponse(); 

    debug($requXML); 
    debug($respXML); 
} 

產生的請求($ requXML)是:

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://tempuri.org/"><SOAP-ENV:Body><ns1:GetData/></SOAP-ENV:Body></SOAP-ENV:Envelope> 

我假設應該有字符串 '你好' 的

<SOAP-ENV:Body><ns1:GetData/></SOAP-ENV:Body>  

標記之間,對不對?

在使用soap __call進行故障排除期間,我一直在使用許多不同的方法,結果相同。服務器已重新啓動。我嘗試了所有我能想到並嘗試的方法。

有沒有人看過這個或有想法?

+0

直接在'client'對象上調用「GetData」方法會產生相同的問題結果?我假設你正在使用'__'方法來調試,對吧? – DeaconDesperado

+0

是的,是的。 $ client - >(GetData,$ params)產生相同的結果。我也嘗試根據一些建議對參數進行設置,並將參數封裝在另一個陣列中無濟於事。 –

回答

0

在這種情況下,我發現我發送的參數沒有完全按照Web服務代碼中的參數命名。通過改變上述:

array('GetData'=> array('parameters'=> 'Hello')), 

到:

array('GetData'=> array('value'=> 'Hello')), 

通話正常工作和參數不再是一片空白!我不知道這種行爲是否是這種情況所特有的,但是在我有限的經驗中,我沒有看到一種情況,即在另一端指定了什麼參數。

無論如何,問題都解決了。希望這可以幫助別人!