Anfänge mit SOAP -> Probleme

evoleena

Erfahrenes Mitglied
Hallo Leute,

ich habe jetzt angefangen mich über SOAP zu belesen und hab jetzt die ersten praktischen Versuche gestartet, hab ein Beispiel aus dem Buch genommen und alles sieht genauso aus, aber es kommt eine Fehlermeldung
Code:
Fatal error: Uncaught SoapFault exception: [WSDL] SOAP-ERROR: Parsing WSDL: 
Couldn't load from 'C:\xampp\htdocs\SOAP\index.php' in C:\xampp\htdocs\SOAP\client.php:3 
Stack trace: #0 C:\xampp\htdocs\SOAP\client.php(3): 
SoapClient->SoapClient('index.php') #1 {main} thrown in C:\xampp\htdocs\SOAP\client.php on line 3

Im Client steht das drin
PHP:
require_once "C:/xampp/htdocs/SOAP/lib/nusoap.php";
$soap = new soapclient("index.php");
print "Aktuelle Uhrzeit: ".$soap->call("jetzt");

und im Server wo die Meldung auftaucht steht das
PHP:
require_once 'C:/xampp/htdocs/SOAP/lib/nusoap.php';
$soap = new soap_server;
//registrieren einer Funktion beim SOAP Server
$soap->register("jetzt");
$soap->service($HTTP_RAW_POST_DATA);

function jetzt($format){
  if($format == null || trim($format)==""){
    return new soap_fault(
      "Client",
      "",
      "Datumsformat nicht angegeben!");  
  }
  else{
    return date($format);
  }
}

weiß jemand was da schief läuft?
Beziehungsweise, wie ist das dann, die eine Datei kommt dann auf den Server und die andere kommt beim Client hin oder?

Gruß
Evo
 
Die Fehlermeldung besagt das die WSDL Datei vom dem Soap Server nicht korrekt gelesen werden konnte.

Wenn du dich in Soap einarbeitest solltest du dir unbedingt auch gleich angewohnen alle aktionen die du über soap abschickst mit try / catch blöcken zu umsehen das du später auf der website hübsche fehlermeldungen darstellen kannst.

PHP:
SoapFault 
try {
    $soap = new soapclient("index.php"); 
    print "Aktuelle Uhrzeit: ".$soap->call("jetzt");  
} catch (SoapFault   $sf) {
   // wenn es einen Soap Fehler vom Fremden Server gab. Falsche Parameter, falsche aktionen.. und wie in deinem Fall auch der WSDL Fehler.
} catch(Exception $e) {
   // wenn es gravierende Probleme gab, z.B. keine connection zum anderen Server
}

Du erhälst den Fehler da du für deinen Server gar kein WSDL File geschrieben hast, was ja auch nicht unbedingt erforlderlich ist. Du solltest dann allerdings bei den Konstruktoren darauf achten es nach dem Manual zu machen und den ersten Parameter leer lassen und in den nächsten die uri und location zu setzen.

PHP:
new soapclient(null, array('location' => "http://localhost/index.php",
                                     'uri'      => "http://localhost/",
                                     'style'    => SOAP_DOCUMENT,
                                     'use'      => SOAP_LITERAL));
Beim Server musst du gleiches auch tun. Schau dir am besten die Dokumentation noch einmal an.
 
Danke für den Hinweis, dabei dachte ich das Buch ist toll, aber solche Hinweise mit der location hab ich da nicht gefunden.
Hab mir das es bei anderen nochmal angeschaut und versucht einzubauen, aber ich habe immer noch einen SOAPFault drin

Server:
PHP:
$soap = new soap_server(null, array("uri"      => "http://localhost/",
  'encoding'=>'UTF-8'2));

Client:
PHP:
$soap = new soapclient(null, array("location" => "http://localhost/client.php",
                                   "uri"      => "http://localhost/",
                                   "style"    => SOAP_DOCUMENT,
                                   "use"      => SOAP_LITERAL));
 
Zurück