2009-06-23 3 views
2

Ich teste einen Server und einen Client, die ich auf meinem Webspace erstellt habe.SOAP Server und Clients mit Zend Framework (Fehler bekommen)

wenn ich versuche, ein einfaches „Testserver“ -Funktion in einer ServerMap Klasse definiert zu nennen, ich „Sieht aus wie wir kein XML-Dokument bekam“

..?

Ich rief getFunctions auf dem Client und testServer ist eine gültige Funktion. Ich habe versucht, alle Ausnahmen abzufangen und dann __getLastResponseHeaders() und __getLastResponse aufzurufen.

Header:

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 
" 

Antwort:

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

" 

Wenn ich an der Quelle html der Antwort suchen, seine tatsächlich:

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> 

Also was ist los? Ich suchte online und ich fand wirklich keine festen Lösungen. Ich habe keine Leerzeichen vor meinem ..

Antwort

0

Wenn Sie an den Browser ausgeben, es versteckt das XML, weil es in einem ist. Browser ignorieren Tags, die sie nicht enthalten.

Do ein Echo htmlentities ($ output); um die XML-Tags zu sehen.

+0

, die wahr sein kann, aber mein Problem steht immer noch, dass ich don‘ t komm zurück von meinem Server, was ich will. Alles, was ich im Browser ausgedruckt habe, wurde von __getLastResponse() und so übernommen – Roman

0

Nicht sicher, was Ihr Problem ist, aber ich kann ein wenig Code, den ich weiß funktioniert für uns mit Zend Framework 1.8x als Backend-SOAP-Service für Silverlight und WCF. Dieser Dienst simples benötigt 2 ganze Zahlen, fügt sie hinzu und gibt das Ergebnis zurück. So einfach wie möglich.

Controller-Klasse Beispiel:

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

Und die eigentliche Arbeit wird von 'SoapMath' durchgeführt, die wie folgt definiert ist:

class SoapMath { 

    public function add($a,$b) { 

     return ($a + $b); 
    } 
} 
Verwandte Themen