0

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

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

顺便说一句:我也尝试过 SoapUI 来消费 web 服务,但结果是一样的。

4

1 回答 1

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()”方法。试试看,让我知道。

问候

于 2013-09-09T13:47:33.103 回答