SOAP-серверы и клиенты с Zend Framework (получение ошибок) - PullRequest
2 голосов
/ 23 июня 2009

Я тестирую сервер и клиента, которые я сделал на своем веб-пространстве.

когда я пытаюсь вызвать простую функцию "testServer", определенную в классе ServerMap, я получаю «Похоже, у нас нет XML-документа»

..

Я вызвал getFunctions на клиенте, и testServer является допустимой функцией. Я попытался перехватить все исключения и затем вызвать __getLastResponseHeaders () и __getLastResponse.

Заголовок:

string(348) "HTTP/1.1 200 OK
Date: Tue, 23 Jun 2009 19:36:29 GMT
Server: Apache/2.2.11 (Win32) DAV/2 mod_ssl/2.2.11 OpenSSL/0.9.8i PHP/5.2.9
X-Powered-By: PHP/5.2.9
Cache-Control: max-age=1
Expires: Tue, 23 Jun 2009 19:36:30 GMT
Vary: Accept-Encoding
Content-Length: 1574
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Content-Type: text/html
"

Ответ:

string(1574) "DEBUG HEADER : This is a cached page !

"

Если я посмотрю на исходный html-ответ, то на самом деле:

string(1574) "DEBUG HEADER : This is a cached page !<?xml version="1.0"?>
<A lot of xml that looks pretty much like my WSDL file that my Zend_Soap_AutoDiscover generates>

Так что происходит? Я искал в Интернете, и я действительно не нашел каких-либо твердых решений. У меня нет свободного места перед моим ..

Ответы [ 2 ]

0 голосов
/ 26 августа 2009

Не знаю, в чем ваша проблема, но я могу предоставить немного кода, который, как мне известно, работает для нас, используя Zend Framework 1.8x в качестве внутреннего SOAP-сервиса для silverlight и WCF. Этот сервис Simples берет 2 целых числа, добавляет их и возвращает результат. Просто, как вы можете получить.

Пример класса контроллера:

class SoapController extends Zend_Controller_Action  {

    /*
     * SOAP server action
     */
    public function indexAction() {

        $request = $this->getRequest();     
        if ($request->getParam('wsdl') !== null) {
            $wsdl = new Zend_Soap_AutoDiscover();
            $wsdl->setClass('SoapMath');
            $wsdl->handle();
        }
        else {  
            $module = $request->getModuleName();
            $controller = $request->getControllerName();
            $uri = 'http://' . Zend_Registry::get('fullUrl') . '/' . $module . '/' . $controller . '?wsdl';
            $server = new Zend_Soap_Server($uri);       
            $server->setClass('SoapMath');
            $server->handle();
        }
        exit;
    }
}

А фактическая работа выполняется с помощью 'SoapMath', который определяется как:

class SoapMath {

    public function add($a,$b) {

        return ($a + $b);
    }
}
0 голосов
/ 23 июня 2009

Если вы выводите в браузер, он скрывает xml, потому что он находится в. Браузеры игнорируют теги, которые они не понимают.

сделать эхо htmlentities ($ output); чтобы увидеть теги xml.

...