2009-06-23 10 views
2

Je suis en train de tester un serveur et un client créés sur mon espace web.Serveurs SOAP et clients avec infrastructure Zend (Obtention d'erreurs)

quand je tente d'appeler une fonction simple « TESTSERVER » définie dans une classe de ServerMap, je reçois « On dirait que nous avons obtenu aucun document XML »

..?

J'ai appelé getFunctions sur le client et testServer est une fonction valide. J'ai essayé d'intercepter toutes les exceptions et d'appeler ensuite __getLastResponseHeaders() et __getLastResponse.

tête:

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 
" 

réponse:

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

" 

Si je regarde le code source HTML de la réponse, le fait:

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> 

Alors ce qui se passe? J'ai cherché en ligne et je n'ai pas vraiment trouvé de solutions solides. Je n'ai pas d'espace vide avant mon ..

Répondre

0

Si vous affichez dans le navigateur, il se cache le xml car il est dans un. Les navigateurs ignorent les tags qu'ils ne comprennent pas.

Faire un echo htmlentities ($ output); pour voir les tags xml.

+0

qui peut être vrai, mais mon problème est toujours debout que je n » Je reviens de mon serveur ce que je veux. Tout ce que j'ai imprimé dans le navigateur provient de __getLastResponse() et de – Roman

0

Vous ne savez pas quel est votre problème, mais je peux vous fournir un peu de code qui fonctionne pour nous en utilisant Zend Framework 1.8x comme service SOAP back-end pour Silverlight et WCF. Ce service simple prend 2 entiers, les ajoute et renvoie le résultat. Simple comme vous pouvez l'obtenir.

exemple contrôleur Classe:

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; 
    } 
} 

Et le travail réel est fait par « SoapMath » qui est défini comme:

class SoapMath { 

    public function add($a,$b) { 

     return ($a + $b); 
    } 
}