Soap Server und Client

Marshallbbw

Erfahrenes Mitglied
Hallo Leute,

ich bin echt extrem verzweifelt. habe schon total viel über soap gelesen und kaum etwas verstanden. Nichts funktioniert: Ich habe mitunter folgendes Beispiel ausprobiert. Im Grunde genommen möchte ich einen simplen Webservice erstellen und per Client nutzen. Aber nichts will funktionieren.

soap_server.php
PHP:
<?php
require_once ("MEINPFAD/lib/nusoap.php");

$oMySoapServer = new soap_server();
$oMySoapServer->register('sGetHallo');
$oMySoapServer->register('sGetTime');

function sGetHello(){
 return "Hallo, Herzlich Willkommen beim neuen Web-Service.";
}
function sGetTime(){
 return "Die aktuelle Zeit: ". date("H:i");
}

//hier wird als Parameter ein String erwartet:
function sGetLoginName($sName){
 return "Hallo, ". $sName;
}


$oMySoapServer->service($HTTP_RAW_POST_DATA);
exit();
?>

test.php
PHP:
<?php
require_once("MEINPFAD/lib/nusoap.php");

$oSoapClient = new soapclient('http://MEINSERVER/soap_server.php');


var_dump($oSoapClient->__getFunctions());

echo $oSoapClient->call('sGetHello');
#echo "<br>";
echo $oSoapClient->call('sGetTime');
?>


Das ist doch so ganz ok - leider bekomme ich folgende Meldung:

Warning: SoapClient::__construct(http://MEINSERVER/soap_server.php) [function.SoapClient---construct]: failed to open stream: HTTP request failed! HTTP/1.1 401 Authorization Required in MEINPFAD/test.php on line 6

Warning: SoapClient::__construct() [function.SoapClient---construct]: I/O warning : failed to load external entity "http://MEINSERVER/soap_server.php" in MEINPFAD/test.php on line 6

Fatal error: Uncaught SoapFault exception: [WSDL] SOAP-ERROR: Parsing WSDL: Couldn't load from 'http://MEINSERVER/soap_server.php' in MEINPFAD/test.php:6 Stack trace: #0 MEINPFAD/test.php(6): SoapClient->__construct('http://MEINSERVER....') #1 {main} thrown in MEINPFAD/test.php on line 6


Könnt Ihr mir einen Hinweis geben - ich bin für jede Hilfe echt dankbar!
 
Der Webserver auf dem dein Soap-Service läuft liefert ein Statuscode von 401 zurück, das heißt er erwartet eine HTTP-Authentifizierung, was auch schon der Kern deines Problems ist. Einfach authentifizieren (ich kenne jetzt NuSOAP nicht genau, aber da gibt es sicherlich eine Methode, zur Not geht meist auch die Syntax: "http://user:password@domain.de".
 
ja du hast total recht - daran hats gelegen - vielen vielen dank - jetzt gehts. ich hab aber jetzt auch noch ne andere frage - ich würde dass alles gerne mit wsdl machen. Leider ist dass ja noch komplizierrter. Kann mir jemand nen tipp geben inwiefern ich mein beispiel darauf abändern kann. ich versteh den ganzen Aufbau dazu nicht obwohl ich schon ne menge dazu gelesen hab.
 
ohgott - das wird ja immer komplizierter - trotzdem danke für den link - ich muss einfach mehr darüber lesen - client und server an sich verstehe ich schon ganz gut - nur diese wsdl ist mir ein rätsel - ich begreife den logischen aufbau nicht - ich hab bswp. folgende scripte die meine basis sein sollen - sobald ich testweise die halloWelt-Funktion mal anders benenne und folglich alle anderen halloWelt-Einträge in der WSDL und in dem Client-Script auf z.B. halloWeltx ändere gehts nicht - und ausserdem möchte ich noch Funktionen hinzufügen. Eine weitere Funktion will mir da einfach auch nicht gelingen. Kannst du mir dass vielleicht an den folgenden Beispiel etwas näher bringen. Würde mich riesig freuen - denn das Thema finde ich zunehmend interessant

billservice.php
PHP:
<?
  class BillInterface
  {
    public function halloWeltx()
    {
      return "Hallo Welt";
    }
  }

  try
  {
    $server = new SOAPServer('billservice.wsdl');
    $server->setClass('BillInterface');
    $server->handle();
  }
  catch (SOAPFault $f)
  {
    print $f->faultstring;
  }
?>

billservice.wsdl
PHP:
<?xml version ="1.0" encoding ="UTF-8" ?>
<definitions name="billservice"
 targetNamespace="MEINPFAD/billservice"
 xmlns:tns=" MEINPFAD/billservice"
 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="halloWeltxResponse">
  <part name="Result" type="xsd:string"/>
 </message>
 <portType name="billservicePortType">
  <operation name="halloWeltx">
   <output message="tns:halloWeltxResponse"/>
  </operation>
 </portType>

 <binding name="billserviceBinding" type="tns:billservicePortType">
  <soap:binding
   style="rpc"
   transport="http://schemas.xmlsoap.org/soap/http"/>
  <operation name="halloWeltx">
   <soap:operation soapAction="urn:halloweltx#halloWeltx"/>
   <output>
    <soap:body
     use="encoded"
     namespace="urn:halloweltx"
     encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
   </output>
  </operation>
 </binding>

 <service name="billserviceService">
  <port name="billservicePort" binding="billserviceBinding">
   <soap:address location="MEINPFAD/billservice.php"/>
  </port>
 </service>
</definitions>


client.php
PHP:
try
{
  $client = new SOAPClient('MEINPFAD/billservice.php?wsdl');

  print $client->halloWeltx();
}
catch (SOAPFault $f)
{
  print $f->faultstring;
}
?>


Die Fehlermeldung ist folgende:
Function ("halloWeltx") is not a valid method for this service
--> ich vermute diese Funktion ist in der WSDL-Datei nicht richtig deklariert - aber wie kann das sein.
 
Zuletzt bearbeitet:
Hallo,

kannst du vielleicht nochmal einen Blick über meine Scripte werfen - ich werd bald verrückt weil das alle snicht funktionieren will. Deine Hilfe wäre echt toll.
 
Zuletzt bearbeitet:
Zurück