SOAP-Webservice mit PHP5 : no xml?

edelmeier

Grünschnabel
Hallo zusammen,

ich habe heute den ganzen Abend damit verbracht einen Soap-webservice zu debuggen, aber leider komme ich einfach nicht weiter. Das ganze ist aus einem Tutorial und sollte recht narrensicher sein.

• vhosts bei mir : http://service, http://client

• definition des servers:
PHP:
<?php
class Webdienst {
  public function halloWelt() {
    return 'Hallo Welt';
  }
}
 
try {
  $server = new SOAPServer('HalloWelt.wsdl');
  $server->setClass('Webdienst');
  $server->handle();
}
 
catch (SOAPFault $f) {
  print $f->faultstring;
}
?>

• definition des clients:

PHP:
<?php
try {
  $client = new SOAPClient('http://service/HalloWelt.wsdl');
  print $client->halloWelt();
}

catch (SOAPFault $f) {
  print $f->faultstring;
}

?>

• definition der wsdl-file:
Code:
<?xml version ="1.0" encoding ="UTF-8" ?>

<definitions name="HalloWelt"
 targetNamespace="http://localhost/HalloWelt"
 xmlns:tns=" http://localhost/HalloWelt"
 xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
 xmlns:xsd="http://www.w3.org/2001/XMLSchema"
 xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
 xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
 xmlns="http://schemas.xmlsoap.org/wsdl/">

 <message name="halloWeltResponse">
  <part name="Result" type="xsd:string"/>
 </message>

 <portType name="HalloWeltPortType">
  <operation name="halloWelt">
   <output message="tns:halloWeltResponse"/>
  </operation>
 </portType>

 <binding name="HalloWeltBinding" type="tns:HalloWeltPortType">
  <soap:binding
   style="rpc"
   transport="http://schemas.xmlsoap.org/soap/http"/>

  <operation name="halloWelt">
   <soap:operation soapAction="urn:hallowelt#halloWelt"/>
   <output>
    <soap:body
     use="encoded"
     namespace="urn:hallowelt"
     encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
   </output>
  </operation>
 </binding>

 <service name="HalloWeltService">
  <port name="HalloWeltPort" binding="HalloWeltBinding">
   <soap:address location="http://localhost/HalloWelt.php"/>
  </port>
 </service>
</definitions>

Lasse ich mir vom Client mittels
PHP:
$a = $client->__getFunctions();
  echo "<pre>";
  var_dump($a);
  echo "</pre>";

alle Funktionen anzeigen, scheint soweit alles ok, ich bekomme angezeigt :

Code:
array(1) {
  [0]=>
  string(18) "string halloWelt()"
}

Wenn ich jedoch die Methode halloWelt() aufrufen will, bekomme ich die Meldung
"looks like we got no XML document".

Leider komme ich nun seit einer geraumen Weile damit nicht mehr weiter. Hat jemand evtl. Vorschläge womit ich es versuchen könnte?

vielen Dank vorab und viele Grüße,

Sebastian
 
Nachtrag : Anderer Rechner, anderes Resultat : hier bekomme ich "DTD are not supported by SOAP", was wohl angeblich soviel heisst wie : Der Client hat anstelle einer SOAP-Antwort eine html-Seite zu sehen bekommen, was auf einen Fehler hinweisen sollte (404, 403,...). Leider bringt mir das nichts, weil ich nicht die response einsehen kann
Code:
object(SoapFault)#2 (9) {
  ["message:protected"]=>
  string(29) "DTD are not supported by SOAP"
  ["string:private"]=>
  string(0) ""
  ["code:protected"]=>
  int(0)
  ["file:protected"]=>
  string(36) "C:\xampp\htdocs\soapclient\index.php"
  ["line:protected"]=>
  int(17)
  ["trace:private"]=>
  array(2) {
    [0]=>
    array(4) {
      ["function"]=>
      string(6) "__call"
      ["class"]=>
      string(10) "SoapClient"
      ["type"]=>
      string(2) "->"
      ["args"]=>
      array(2) {
        [0]=>
        string(9) "halloWelt"
        [1]=>
        array(0) {
        }
      }
    }
    [1]=>
    array(6) {
      ["file"]=>
      string(36) "C:\xampp\htdocs\soapclient\index.php"
      ["line"]=>
      int(17)
      ["function"]=>
      string(9) "halloWelt"
      ["class"]=>
      string(10) "SoapClient"
      ["type"]=>
      string(2) "->"
      ["args"]=>
      array(0) {
      }
    }
  }
  ["faultstring"]=>
  string(29) "DTD are not supported by SOAP"
  ["faultcode"]=>
  string(6) "Client"
  ["faultcodens"]=>
  string(41) "http://schemas.xmlsoap.org/soap/envelope/"
}
Request :
NULL

Response :
NULL

Ich habe gerade auch nochmal die WSDL durchgeschaut und alle uris angepasst, aber auch das war nicht die lösung

viele Grüße,

Sebastian
 
Zuletzt bearbeitet:
Hat sich mittlerweile erledigt.

es waren im wsdl-file nicht alle uris korrekt. nun wirds interessant : Ich versuche das ganze unter ssl ans laufen zu bekommen...
 
Zurück