Einzelnen Beitrag anzeigen

Chewie

Registriert seit: 10. Jun 2002
Ort: Deidesheim
2.886 Beiträge
 
Turbo Delphi für Win32
 
#1

[PHP. SOAP, WSDL] Fehlerhafte WSDL-Datei?

  Alt 14. Feb 2006, 13:43
Ich experimentiere gerade etwas mit SOAP und WSDL, dazu verwende ich PHP. Ich möchte für den Anfang eine einfache Funktion exportieren, die einfach eine Ganzzahl zurückgibt. Und halt das volle Programm mit SOAP und einer WSDL-Datei.

Die beteiligten Dateien:

Der PHP-Server:
Code:
<?php

function getAmount() {
   return 1.0;
}

ini_set('soap.wsdl_cache_enabled', "0");

$server = new SoapServer('bierometer.wsdl');
$server->addFunction('getAmount');

$server->handle();

?>
Der PHP-Client:
Code:
?php

ini_set('display_errors', 'on');

echo 'Fange an...
';
$client = new SoapClient('bierometer.wsdl');
echo 'Menge: ';
echo $client->getAmount();



?>
Die WSDL-Datei:

XML-Code:
<?xml version="1.0" encoding="iso-8859-1"?>
<definitions name="BierOMeter"
   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="getAmountResponse">
      <part name="Result" type="xsd:float"/>
   </message>

   <portType name="BierOMeterPortType">
      <operation name="getAmount">
         <output message="getAmountResponse"/>
      </operation>
   </portType>

   <binding name="BierOMeterBinding" type="BierOMeterPortType">
      <soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
      <operation name="getAmount">
         <soap:operation soapAction="urn:BierOMeter"/>
         <input>
            <soap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="urn:BierOMeter" use="encoded" />
         </input>
         <output>
             <soap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="urn:BierOMeter" use="encoded" />
         </output>
     </operation>
   </binding>

   <service name="BierOMeterService">
      <port name="BierOMeterPortType" binding="BierOMeterBinding">
         <soap:address location="http://localhost/soap.php"/>
      </port>
   </service>

</definitions>

Beim Aufruf des Clients bekomm ich folgenden Fehler:
Zitat:
Fatal error: Uncaught SoapFault exception: [SOAP-ENV:Client] looks like we got no XML document in C:\Web\soap\client.php:8
Stack trace:
#0 C:\Web\soap\client.php(8): SoapClient->__call('getAmount', Array)
#1 C:\Web\soap\client.php(8): SoapClient->getAmount()
#2 {main} thrown in C:\Web\soap\client.php on line 8

Als ich testweise die Datei im Visual Studio importieren wollte, klappte das auch nicht (ich weiß den Fehler aber nicht mehr). Ich scließe daraus, dass der Fehler in der WSDL-Datei liegt. Leider bin ich auf dem Gebiet völliger Anfänger und hab mir das da oben alles aus Tutorials gesaugt, sodass ich den Fehler nicht selber finde.

Kennt sich hier jemand vielleicht gut damit aus und kann mir einen Tipp geben?

Dankeschön!
Martin Leim
Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
  Mit Zitat antworten Zitat