(Zend)Soap Server不返回结果

时间:2012-10-10 07:53:59

标签: php zend-framework soap

我一直在尝试使用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);

$resultNULL

我的想法已经不多了,希望有人能帮助我解开这个谜团。

BTW:我也试过使用SoapUI来使用web服务,但结果是一样的。

1 个答案:

答案 0 :(得分:0)

也许我发现了这个问题。请检查并报告您的投票是否正确。 我改变了使用选项而不是主uri参数调用Soap的方式,这样:

try{
        // initialize SOAP client
        $options = array(
                'location'  => 'http://localhost/experiments/soap/server.php',
                'uri'       => 'http://localhost/experiments/soap/server.php'
        );

        $client = new Zend_Soap_Client(null, $options);
        $result = $client->pi();
        Zend_Debug::dump($result);

    }catch(SoapFault $e){
        Zend_Debug::dump($e);
        echo $e->getMessage();
    }
}

如果调用WSDL,则客户端无法调用“pi()”方法。试试吧,让我知道。

此致