Zend - WebService
-
Hallo Leute bin neu hier und versuch gerade mit Zend Framework einen Webservice anzubieten (zu realisieren).
Das Ganze mache ich in MVC und es siet dann ca. so aus:
<?php class SoapController extends Zend_Controller_Action { public function balanceAction() { require_once APPLICATION_PATH . '/models/CustomerWebservice.php'; $this->_helper->viewRenderer->setNoRender(); $this->_helper->layout()->disableLayout(); // disabling WSDL cache ini_set("soap.wsdl_cache_enabled", "0"); // get request $request = $this->getRequest(); $paramwsdl = $request->getParam('wsdl'); if($paramwsdl == 1) { // return the WSDL $autodiscover = new Zend_Soap_AutoDiscover(); $autodiscover->setClass('CustomerWebservice'); $autodiscover->handle(); exit(); } else { // handle SOAP request $server = new SoapServer('http://gateway.domain.de/soap/balance/wsdl/1'); $server->setClass('CustomerWebservice'); $server->handle(); exit(); } } public function clientAction() { $client = new Zend_Soap_Client('http://gateway.domain.de/soap/balance/wsdl/1'); $name = $client->getName(5); echo 'Name:' . $name; } }
Und die Customer Klasse so:
<?php class CustomerWebservice { /** * Gibt Namen aus * * @param integer $id * @return string */ public function getName($id) { return "Test"; } }
Wenn ich jetzt das ganze so aufrufe:
http://gateway.domain.de/soap/balance/wsdl/1
wird folgende WSDL im Browser angezeigt:
<definitions name="CustomerWebservice" targetNamespace="http://gateway.domain.de/soap/wsdl/1"> <types> <xsd:schema targetNamespace="http://gateway.domain.de/soap/wsdl/1"/> </types> <portType name="CustomerWebservicePort"> <operation name="getName"> <documentation>echoes input string Test method</documentation> <input message="tns:getNameIn"/> <output message="tns:getNameOut"/> </operation> </portType> <binding name="CustomerWebserviceBinding" type="tns:CustomerWebservicePort"> <soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/> <operation name="getName"> <soap:operation soapAction="http://gateway.domain.de/soap/wsdl/1#getName"/> <input> <soap:body use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://gateway.domain.de/soap/wsdl/1"/> </input> <output> <soap:body use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://gateway.domain.de/soap/wsdl/1"/> </output> </operation> </binding> <service name="CustomerWebserviceService"> <port name="CustomerWebservicePort" binding="tns:CustomerWebserviceBinding"> <soap:address location="http://gateway.domain.de/soap/wsdl/1"/> </port> </service> <message name="getNameIn"> <part name="str" type="xsd:string"/> </message> <message name="getNameOut"> <part name="return" type="xsd:string"/> </message> </definitions>
Ich hoffe die Stimmt so weit...?!
Wenn ich dann aber im Browser den Client zum testen aufrufe:
http://gateway.domain.de/soap/client
Dann kommt:
Exception information:
Message: Wrong Version
Sieht jemand vielleicht den Fehler oder kann mich in richtige Richtung anstossen ? Habe schon alles mlgliche ausprobiert, finde aber nichts