我一直在尝试使用 Zend_Soap_Server 设置一个 Soap 服务器,但我似乎无法让它工作。
我尝试了几种不同的环境:linux vm 上的 nginx 和 apache、windows 上的 apache、php 5.3 和 php 5.4,都产生相同的结果。
使用 Zend_Soap_Autodiscover 它正确地生成了一个 wsdl。当我将该 wsdl 提供给 SoapClient 并在其上调用方法时,它不会返回响应。调用 SoapServer::handle() 后似乎 php 停止了。
这是服务器部分:
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
。_
我的想法不多了,希望有人能帮我解开这个谜。
顺便说一句:我也尝试过 SoapUI 来消费 web 服务,但结果是一样的。