Zend Soap Server с автообнаружением wsdl не работает должным образом - PullRequest
1 голос
/ 18 февраля 2011

Дубликат этот вопрос

Я пытаюсь создать веб-сервис с Zend_Soap_Server в режиме автообнаружения wsdl, но получаю очень странные эффекты ... вот код: Сервер:

<?php
require_once('Zend/Soap/AutoDiscover.php');
require_once('Zend/Soap/Server.php');
require_once('Zend/Soap/Wsdl.php');
require_once('library/SoapActions.php');
$wsdl = new Zend_Soap_Autodiscover();
$wsdl->setClass('SoapActions');
if (isset($_GET['wsdl'])) {
$wsdl->handle();
    } else {
    $server = new Zend_Soap_Server('http://localhost:8083/server.php?wsdl');
    $server->setClass('SoapActions');
    $server->setEncoding('ISO-8859-1');
    $server->handle();
    }

Класс SoapActions:

class SoapActions {

/**
 * Test function
 * 
 * @param String $a
 * @param String $b
 * @return String
 */
 public function test1($a, $b) {
    return "you passed me ".$a." ".$b;
 }

 /**
 * Test function 2
 * 
 * @param String $a
 * @param String $b
 * @return String
 */
 public function test2($a, $b) {
    return "you passed me ".$a." ".$b;
 }

}

Я пытался использовать функцию test1 и test2, используя класс Zend_Soap_Client, здесь код:

require_once('Zend/Soap/Client.php');
    $client = new Zend_Soap_Client("http://localhost:8083/server.php?wsdl");

    try {
        echo $client->test2("foo","bar"); //this works!
    } catch (Exception $e) {
        echo $e;
    }

    try {
        echo $client->test1("foo","bar"); //this doesn't work!
    } catch (Exception $e) {
        echo $e;
    }

Я не могу понять, потому что функция test2 работает должным образом, функция test1 возвращает следующее исключение:

Исключение SoapFault: функция [Отправитель] ("test1") не является допустимым методом для эта услуга в /usr/local/zend/share/ZendFramework/library/Zend/Soap/Client.php:1121 Трассировки стека: 0 /usr/local/zend/share/ZendFramework/library/Zend/Soap/Client.php(1121): SoapClient -> __ soapCall ('test1', Array, NULL, NULL, Array) 1 /usr/local/zend/apache2/htdocs/webservice/client.php(6): Zend_Soap_Client -> __ вызова ( 'test1', Array) 2 /usr/local/zend/apache2/htdocs/webservice/client.php(6): Zend_Soap_Client-> test1 ('foo', 'bar') 3 {main}

Я пытался инвертировать имя функции ... результат невероятный, работает только test2! Я схожу с ума, кажется, что где-то на стороне сервера это сохранить имя функции ...

Может кто-нибудь мне помочь?

Ответы [ 2 ]

7 голосов
/ 18 февраля 2011

РЕШИТЬ!Проблема была в этом параметре в файле php.ini:

soap.wsdl_cache_enabled=1

Я установил это значение на 0, и теперь оно работает отлично!

1 голос
/ 25 февраля 2014

Если вы не хотите менять свой php.ini:

// WSDL_CACHE_NONE;     /* 0 Pas de cache */
// WSDL_CACHE_DISK;     /* 1 Sur le disque supprimer le fichier pour le réinitialiser */
// WSDL_CACHE_MEMORY;   /* 2 En mémoire => redémarrer Apache pour le réinitialiser */
// WSDL_CACHE_BOTH;     /* 3 En mémoire et sur le disque */

$options = array();
$options['cache_wsdl'] = WSDL_CACHE_NONE;
$client = new Zend_Soap_Client("http://localhost:8083/server.php?wsdl", $options);
...