我試圖使用SoapClient
從PHP代碼調用Web服務。param0在使用SoapClient類的PHP中的Soap請求中消失
$service = new SoapClient($wsdl);
$service->myFunction('something', 'anotherthing', 'onemore');
如果我打開跟蹤,並獲得最後一個請求,我可以看到,第一個參數總是從SOAP消息丟失,即param0
是永遠存在。具有更少或更多參數的功能是一樣的。
SOAP請求:
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Body>
<myFunction />
<param1>anotherthing</param1>
<param2>onemore</param2>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
我希望它是(和使用soapUI的時候就是我的網絡服務接受):
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Body>
<myFunction>
<param0>something</param0>
<param1>anotherthing</param1>
<param2>onemore</param2>
</myFunction>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
這是相同與
__soapCall('myFunction', array($something, $anotherthing, $onemore));
我在Windows XP上使用xpppplite。
更新:http://programming.itags.org/php/236781/是有人用同樣的問題(發佈於2008年,沒有答案:()鏈接
更新2:我也注意到,它並沒有把代表參數的XML元素子元素代表函數的元素,這是不對的?!!
我已經做了一個可怕的修復,我重載了__doRequest函數並編輯了$ request變量,它可以工作,但它很糟糕。我不妨自己編譯整個請求......
更新3:對我來說,感覺就像PHP一樣故障。但是如果這是肥皂實施中的一個錯誤,我認爲網上會有更多的信息。 aaaargh。接下來的嘗試是嘗試NuSoap和PEAR。
更新4:爲了取整,我沒有嘗試NuSoap和PEAR。我剛剛與我的'黑客',因爲它的工作,還有其他需要做的活動。此外,演示已經完成,下一階段PHP將不再使用。所以整個事情無論如何都會重新實施。
我的意思是得到最後一個請求是調用__getLastRequest()。我編輯了我的問題以顯示__getLastRequest()返回的Soap請求。我會看看doRequest()顯示了什麼。 – 2010-09-28 12:53:17
doRequest報告相同。有道理我猜:)。但是,這給了我自己在doRequest超載中添加param0的想法。也許不是最優雅的解決方案,但它適合問題的優點.........如果它有效或無效,我會報告回來。 – 2010-09-28 13:35:56
你有沒有嘗試過不同的操作(或更好的,不同的WSDL)?也許這是特定的操作。您必須確定問題是出在SoapClient還是WSDL上。 – 2010-09-28 14:37:35