PEAR-Forum.de Übersicht Thema anzeigen - Keine Rückgabe bei SOAP und WSDL

Keine Rückgabe bei SOAP und WSDL


 

PEAR-Forum.de Übersicht » Web Services
Neues Thema eröffnen Neue Antwort erstellen Diesen Beitrag ausdrucken
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
ph
Neuer User


Anmeldungsdatum: 22.04.2008
Beiträge: 3

Beitrag22.04.2008 10:07    Keine Rückgabe bei SOAP und WSDL Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Berdir
Power User


Anmeldungsdatum: 22.09.2005
Beiträge: 1347

Beitrag26.04.2008 10:02     Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden PEAR-User
ph
Neuer User


Anmeldungsdatum: 22.04.2008
Beiträge: 3

Beitrag28.04.2008 12:20     Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
ph
Neuer User


Anmeldungsdatum: 22.04.2008
Beiträge: 3

Beitrag29.04.2008 7:00     Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Diese Seite übersetzen
PEAR-Forum.de Übersicht » Web Services
Neues Thema eröffnen Neue Antwort erstellen Diesen Beitrag ausdrucken
   Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

Zu Deinen Favoriten hinzufügen

 
Gehe zu:  
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