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