Hallo zusammen!
Ich experimentiere gerade etwas mit SOAP und habe dazu mittels der bei PHP 5 enthaltenen Extension einen einfachen XML-RPC geschrieben.
Leider will dieser nicht so, wie ich will. Zur Beschreibung des Dienstes hab ich eine WSDL-Datei geschrieben.
Diese scheint aber fehlerhaft zu sein, denn der Aufruf funktioniert nicht.
Folgende Fehlermeldung erscheint:
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
|
Der
Server sieht so aus:
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
Client:
Code:
<?php
ini_set('display_errors', 'on');
echo 'Fange an...
';
$client = new SoapClient('bierometer.wsdl');
echo 'Menge: ';
echo $client->getAmount();
?>
Und letztenendes die
WSDL-Datei (ich denke, der Fehler liegt darin, aber ich weiß nicht, was ich hätte anders machen sollen. Die DAtei ist Ergebnist von ein, zwei Tutorials):
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>
Danke schon mal im Voraus!