Hi, erst mal danke für die Antwort.
Ich habe das Tutorial nochmal durchgearbeitet und mir die WSDL-Datei erstellt. Funktioniert soweit ganz gut.
Dabei ist mir folgendes aufgefallen: Wenn in der WSDL der Pfad zum Webservice angegeben wird
Code:
<service name='TestServerService'>
<port name='TestServerPort' binding='TestServerBinding'>
<soap:address location='http://www.url.de/webservices/server.php5' />
</port>
</service>
und im Client folgender Aufruf erfolgt
PHP-Code:
$client = new SoapClient('http://www.url.de/webservices/wsdl/BensersielService.wsdl');
funktioniert es nicht. Ich erhalte eine Fehlermeldung "Could not connect to host". Gebe ich aber im Client folgendes an:
PHP-Code:
$client = new SoapClient('http://www.url.de/webservices/wsdl/BensersielService.wsdl',array("location" => "http://www.url.de/webservices/server.php5"));
funktioniert es. Wo liegt da der Fehler?
Wie ich mittlerweile herausgefunden habe, muss man das Resultat der PHP-SOAP-Methoden, wie z. B. __getLastRequest, in <xmp></xmp> einfassen, damit man eine Ausgabe im Browser erhält.
Nun aber weiter mit meinem Webservice. Ich möchte den im Threadstart genannten XML-Code an den zukünftigen Webservice senden. Die noch nicht für den Webservice angepasste WSDL-Datei ist unter
http://www.nordseetraum.de/webservic...elService.wsdl zu finden.
Der Webservice hat derzeit noch folgenden Aufbau:
PHP-Code:
<?php
// Fehlermeldungen anzeigen
error_reporting(E_ALL);
function addiere($sum1, $sum2) {
if(isset($sum1) && isset($sum2))
return $sum1 + $sum2;
else
return new SoapFault('Client', 'Eingabe nicht korrekt', 'server.php5', '');
}
$server = new SoapServer(NULL,
array('uri' => "http://www.nordseetraum.de/webservices/"));
$server->addFunction('addiere'); //Funktion zum Server hinzufügen
$server->handle(); //Hier wird die Abfrage abgearbeitet
?>
Im Client sende ich mittels curl den XML-String an den Webservice:
PHP-Code:
$body = 'XML-String aus Threadstart';
$headers = array(
"Content-Type: text/xml;charset=UTF-8",
"SOAPAction: \"urn:addiere\"");
//1. Die Session initialisieren
$ch = curl_init();
//2 . Session Optionen setzen
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_URL, "http://www.nordseetraum.de/webservices/server.php5");
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); // Immer setzen, wenn kein Zertifikat vorhanden
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($ch, CURLOPT_POSTFIELDS, $body);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
//3. Ausführen der Aktionen
$result = curl_exec($ch);
if($result === false){
echo '<p>Fehler: '.curl_error($ch);
} else {
echo '<p>Ergebnis: '.$result;
$info = curl_getinfo($ch);
//foreach($info AS $k => $v)
// echo '<p>'.$k.' => '.$v;
}
//4. Session beenden
curl_close($ch);
Ich bekomme keinen curl-Fehler ausgegeben. Die Übertragung scheint also zu funktionieren. Als Ausgabe erhalte ich
HTML-Code:
Ergebnis: SOAP-ENV:VersionMismatchWrong Version
. Und das Ganze in XML-Form:
HTML-Code:
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"><SOAP-ENV:Body><SOAP-ENV:Fault><faultcode>SOAP-ENV:VersionMismatch</faultcode><faultstring>Wrong Version</faultstring></SOAP-ENV:Fault></SOAP-ENV:Body></SOAP-ENV:Envelope>
Das es nicht funktionieren kann ist klar. Aber da ich keine Erfahrung habe, weiß ich nicht genau, wie ich weiter vorgehen kann/muss/sollte. Und wie es immer so ist, man hat wenig Zeit sich mit der Materie intensiver auseinanderzusetzen. Deshalb frage ich jemanden, der sich damit auskennt ;-)
Ich würde als nächstes erst mal die WSDL-Datei anpassen wollen, damit ich den Fehler "VersionMismatchWrong Version" wegbekomme. Wo kann da die Ursache liegen? Ich habe gelesen, dass es am falschen Namespace liegen kann oder am fehlenden Root-Element "ENVELOPE". Wie und wo muss ich das in der WSDL-Datei angeben?