0
我一直在試圖安裝使用Zend_Soap_Server SOAP服務器,但我似乎無法使它工作。
我已經嘗試了幾種不同的環境:在linux vm上的nginx和apache,在windows上的apache,php 5.3和php 5.4,都產生了相同的結果。(Zend公司)Soap服務器沒有返回結果
使用Zend_Soap_Autodiscover它正確地產生WSDL。當我將該wsdl提供給SoapClient並調用其上的方法時,它不會返回響應。看起來像SoapServer :: handle()被調用後停止。
這是服務器部分:
ini_set('soap.enable_wsdl_cache', 0);
require_once 'Zend/Soap/AutoDiscover.php';
require_once 'Zend/Soap/Server.php';
if (isset($_GET['wsdl'])) {
handleWsdl();
} else {
handleSoap();
}
function handleWsdl() {
$autodiscover = new Zend_Soap_AutoDiscover();
$autodiscover->addFunction('pi');
$autodiscover->handle();
}
function handleSoap() {
$soap = new Zend_Soap_Server('http://localhost/experiments/soap/server.php?wsdl');
$soap->setWsdlCache(false);
$soap->addFunction('pi');
$soap->handle();
}
這是客戶端:
ini_set('soap.enable_wsdl_cache', 0);
$wsdl = 'http://localhost/experiments/soap/server.php?wsdl';
$client = new SoapClient($wsdl, array('trace' => 1));
$result = $client->pi();
var_dump($result);
的$result
是NULL
。
我跑出來的想法,並希望有人能幫助我解開這個謎。
BTW:我也嘗試了SoapUI消耗的web服務,但結果是一樣的。
好的,這可能很愚蠢,但是你有服務器端的名爲「pi」的實際功能? – Ivica
php.net/pi,這是一個內置的功能:) –
吧:) 好,爲什麼不換「PI()」起來「PI2()」或類似的東西,並添加在前面的一些基本警報/回聲/某事,那麼你至少可以在服務器端檢查你的代碼是從客戶端調用的...(即你可以驗證請求到達服務器的正確位置)。 另外,Zend_Soap_AutoDiscover使用PHP docblocks來確定通過soap返回的數據類型,也許pi()並不是那麼好描述? 也許返回值「PI()」也應該被包裹在一些SOAP信封,或提出一些stdClass的或東西... 只是想大聲... – Ivica