HAUPPAUGE WinTV-PVR und Media Center Edition 2005: Fernbedienung

SOAP via PHP II

Jan 9

Von:
09.01.2004  RssIcon

Tja, mit den kompexen Datentypen und nuSOAP hatte ich heute erhebliche Probleme. Selbst das Beispiel von D.Ayala bekam ich nicht zum Laufen. Es haperte daran, dass ich die über $server->wsdl->addComplexType() erzeugten Datentypen nicht mit ihrem Namespace ('tns:...') registrieren konnte. Mit dem Namespace 'xsd:..' ging es, aber dann wurden die Methoden im Studio (bzw. der Web-Referenz) nicht richtig erkannt.

Patrick überedete mich dann von nuSOAP abzusehen und die PEAR-Implementierung auszuprobieren. Nachdem die abhängigen Pakete identifiziert und installiert waren (PEAR, Mail_MIME, HTTP_Request, Net_Url, Net_Dime, und Net_Socket), hatte ich schnell einen einfachen Server laufen - allerdings noch ohne komplexe Datentypen.
Für die Registrierung von Servermethoden steht keine Methode zur Verfügung, sondern man erzeugt einen Hash-Eintrag in der Eigenschaft __dispatch_map:
$this->__dispatch_map['Echo'] =array('in' => array('message' => 'string'),'out' => array('outputString' => 'string'));

Auch die Registrierung von komplexen Datentypen verläuft in ähnlicher Weise:
$this->__typedef['{http://soapinterop.org/xsd}structKomplex'] = array('id' => 'int','name' => 'string','date_begin' => 'string','event_begin' => 'string','description' => 'string');
Um diesen Datentyp in einer Methode zu verwenden schreibt man dann einfach:
$this->__dispatch_map['UseKomplex'] =array('in' => array('id' => 'int'),'out' => array('komplex' => '{http://soapinterop.org/xsd}structKomplex'),);

Umständlich  ist nur die Rückgabe der Struktur in der Service-Methode selbst, da diese durch Kombination von zu erzeugenden SOAP_Value-Instanzen zusammengesetzt werden muss. Ein Beispiel hierfür spare ich mir an dieser Stelle, weil das in den Beispielen des Paketes enthalten ist (und um niemanden abzuschrecken..;)

Viele Antworten auf Fragen gibt es in der Newsgroup zu PEAR::SOAP.

Tags:
Categories:
Nutzungsbedingungen
(c) 2011 e-llusions