|
|
| Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
| Autor |
Nachricht |
ph Neuer User
Anmeldungsdatum: 22.04.2008 Beiträge: 3
|
22.04.2008 10:07 Keine Rückgabe bei SOAP und WSDL |
|
|
Hallo,
ich bastel ein kleines Beispiel mit SOAP und WSDL, um die prinzipielle Kommunikation zu testen. Der Client sendet einen Namen, der Server meldet eine entsprechende Begrüßung. So die Idee, aber es klappt nicht... Ich habe schon viele Seiten durchforstet, irgendwie scheine ich die Puzzlestücke nicht richtig zusammenzufügen. Hat jemand eine Idee, was ich hier falsch mache?
ComTestServer.wsdl:
===================
<?xml version ="1.0" encoding ="UTF-8" ?>
<definitions name="ComTest"
targetNamespace="http://localhost/ComTest.wsdl"
xmlns:tns="http://localhost/ComTest.wsdl"
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="getHelloInput">
<part name="name" type="xsd:string"/>
</message>
<message name="getHelloOutput">
<part name="result" type="xsd:string"/>
</message>
<portType name="ComTestPortType">
<operation name="sayHello">
<input message="tns:getHelloInput"/>
<output message="tns:getHelloOutput"/>
</operation>
</portType>
<binding name="ComTestBinding" type="tns:ComTestPortType">
<soap:binding style="document"
transport="http://schemas.xmlsoap.org/soap/http"/>
<operation name="sayHello">
<soap:operation soapAction="tns:sayHello"/>
<input>
<soap:body use="literal"/>
</input>
<output>
<soap:body use="literal"/>
</output>
</operation>
</binding>
<service name="ComTestService">
<port name="ComTestPort" binding="tns:ComTestBinding">
<soap:address location="http://myDom/ComTestServer.php"/>
</port>
</service>
</definitions>
ComTestServer.php:
==================
<?php
class Output {
function Output() {
$this->dispatchMap["sayHello"] =
array("in" => array("Name" => "string"),
"out"=> array("Text" => "string")
);
}
function sayHello($Name) {
$result = "Hello World! Hello " . $Name . "!";
return array('Text' => $result);
}
}
require_once 'SOAP/Server.php';
$server = new SOAP_Server();
$output= new Output();
$server->addObjectMap($output, 'urn:comtest');
$server->service($HTTP_RAW_POST_DATA);
?>
ComTestClient.php:
==================
<?php
require_once 'SOAP/Client.php';
require_once 'SOAP/WSDL.php';
$client = new SOAP_Client('http://bombadil/ComTestServer.wsdl', true);
$params = array("Name" => "Hans");
$result = $client->call('sayHello', $params, 'urn:comtest');
echo "Antwort des SOAP-Server: " . $result->Text;
?>
Das Ergebnis ist:
Antwort des SOAP-Server:
Sollte aber sein (und das macht mein Beispiel auch, wenn ich ohne WSDL arbeite):
Antwort des SOAP-Server: Hello World! Hello Hans!
Ich habe das Error-Logging auf Level "debug" gesetzt, erhalte aber keine Meldungen. Und noch eine ganz blöde Frage: Wo werden die SOAP-Nachrichten geloggt?
Vielen Dank im voraus,
Pauline |
|
| Nach oben |
|
 |
Berdir Power User
Anmeldungsdatum: 22.09.2005 Beiträge: 1347
|
26.04.2008 10:02 |
|
|
Prüf doch einmal $result, ev. ist es ein PEAR-Error.
Ansonsten einmal mit var_dump die verschiedenen Variablen (auch/insbesondere $result) ausgeben lassen und schauen was dort drin steht. |
|
| Nach oben |
|
 |
ph Neuer User
Anmeldungsdatum: 22.04.2008 Beiträge: 3
|
28.04.2008 12:20 |
|
|
Der Tipp mit dem var_dump hat mir zusammen mit ein paar weiteren Puzzlestücken auf die springende Idee geholfen, danke! Ich muss den Client anpassen, dann klappt es:
[code]
<?php
require_once 'SOAP/Client.php';
require_once 'SOAP/WSDL.php';
$url='http://bombadil/ComTestServer.wsdl';
$wsdl = new SOAP_WSDL($url);
$client = $wsdl->getProxy();
// Variable als Array deklarieren, in welcher die Return-Werte abgelegt werden
$params = array("Name" => "Hans");
// Aufruf der Web-Service Funktion
$options = array("namespace" => "urn:ComTest", "soapaction" => "urn:ComTest/sayHello", "trace" => 1);
$eingabe="Hans-Wurst";
$result = $client->call('sayHello', $eingabe, $options);
// Ausgabe der Werte:
echo "Antwort des SOAP-Server: ";
echo $result->Text;
?>
[/code]
[/code] |
|
| Nach oben |
|
 |
ph Neuer User
Anmeldungsdatum: 22.04.2008 Beiträge: 3
|
29.04.2008 7:00 |
|
|
ach ja, und es tut's sowohl mit
| Code: |
$result = $client->call('sayHello', $eingabe, $options);
|
als auch mit
| Code: |
$result = $client->call('sayHello', $params, $options);
|
|
|
| Nach oben |
|
 |
|
|
|
Zu Deinen Favoriten hinzufügen
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum nicht posten Du kannst Dateien in diesem Forum herunterladen
|
|