PHP SOAP ich Kriegs einfach nicht hin!

jackisback

Erfahrenes Mitglied
PHP SOAP ich Kriegs einfach nicht hin!
Ich will ein Webservice erstellen aber ich bekomme ständig eine Fehlermeldung.
Hier der Code:

webservice.php
PHP:
<?php 
function  addiere($sum1, $sum2) { 
    return $sum1 + $sum2; 
} 

$server = new SoapServer("testserver.wsdl");              //{uri} müsst ihr ersetzen mit den pfad  
$server->addFunction('addiere');            //Funktion zum Server hinzufügen 
$server->handle();                     //Hier wird die Abfrage abgearbeitet 
?>

Jetzt der Client:
test.php
PHP:
<?php 
$client = new SoapClient('http://localhost/webservice/testserver.wsdl');  //{url} wie immer ersetzen 

$result = $client->addiere(10, 20); 

echo $result; 
?>

Und die WSDL Datei

testserver.wsdl

PHP:
<?xml version ='1.0' encoding ='UTF-8' ?> 
<definitions name='TestServer' 
  xmlns:tns=' http://example.com/testserver.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='addiereAnfrage'> 
  <part name='sum1' type='xsd:float'/>
  <part name='sum2' type='xsd:float'/>
</message> 
<message name='addiereAntwort'> 
  <part name='Result' type='xsd:float'/> 
</message> 

<portType name='TestServerPortType'> 
  <operation name='addiere'> 
    <input message='tns:addiereAnfrage'/> 
    <output message='tns:addiereAnwort'/> 
  </operation> 
</portType> 

<binding name='TestServerBinding' type='tns:TestServerPortType'> 
  <soap:binding style='rpc' 
    transport='http://schemas.xmlsoap.org/soap/http'/> 
  <operation name='addiere'> 
    <soap:operation soapAction='urn:xmethodsTestServer#addiere'/> 
    <input> 
      <soap:body use='encoded' namespace='urn:xmethodsTestServer' 
        encodingStyle='http://schemas.xmlsoap.org/soap/encoding/'/> 
    </input> 
    <output> 
      <soap:body use='encoded' namespace='urn:xmethodsTestServer' 
        encodingStyle='http://schemas.xmlsoap.org/soap/encoding/'/> 
    </output> 
  </operation> 
</binding> 

<service name='TestServerService'> 
  <port name='TestServerPort' binding='TestServerBinding'> 
    <soap:address location='http://localhost/webservice/webservice.php'/> 
  </port> 
</service> 
</definitions>

ich benutze XAMP und auf einen Lokalen Server.

die Fehler Meldung:

Warning: SoapClient::SoapClient(http://localhost/webservice/testserver.wsdl) [function.SoapClient-SoapClient]: failed to open stream: Ein Verbindungsversuch ist fehlgeschlagen, da die Gegenstelle nach einer bestimmten Zeitspanne nicht richtig reagiert hat, oder die hergestellte Verbindung war fehlerhaft, da der verbundene Host nicht reagiert hat. in C:\xampp\htdocs\webservice\test.php on line 2

Warning: SoapClient::SoapClient() [function.SoapClient-SoapClient]: I/O warning : failed to load external entity "http://localhost/webservice/testserver.wsdl" in C:\xampp\htdocs\webservice\test.php on line 2

Fatal error: Maximum execution time of 60 seconds exceeded in C:\xampp\htdocs\webservice\test.php on line 7


Kann doch nicht so schwer sein oder?

MFG
 
Hi jackisback,
ich habe ein ähnliches Problem, das nur auf Windows Vista auftaucht. Mit Windows XP geht bei mir alles. Kann es bei dir auch daran liegen? Hat ev. Vista ein Problem mit PHP und SOAP?

Danke und Beste Grüße
-s.
 
Hallo jackisback,
ich habe mein oben beschriebenes Problem unter Windows Vista gelöst. Es lag offensichtlich an IPv6 oder sowas in der Art. Als "localhost" oder "rechnername" lies sich der Soap Server nicht ansprechen. Wenn ich aber die IPv4 Adresse (192.168.100.1 o. ä.) versuche dann klappt es! Yippi!

Grüße
-s.
 
In dem Tutorial ist ein Fehler drin:

PHP:
 <portType name='TestServerPortType'> 
  <operation name='addiere'> 
    <input message='tns:addiereAnfrage'/> 
    <output message='tns:addiereAnwort'/> 
  </operation> 
</portType>
Es sollte tns:addiereAntwort und nicht tns:addiereAnwort heissen!
 
Ich hatte grade das selbe Problem unter Windows Vista. Leider schafft es der Webserver hier irgendwie nicht, die Adresse http://localhost in http://127.0.0.1 aufzulösen. Habe das dann auch manuell gemacht, danke kieste :-). Hier mein Code:

http://localhost/ws/soapserver.php sieht so aus:
PHP:
<?php
	require_once('services.php');
	$server = new SoapServer(null, array('uri' => "http://localhost/ws/"));
	$server->setClass('Services');
	$server->handle();
?>
wobei in der services.php meine webservices stehen.
Hier kann komischerweise localhost stehenbleiben!

und mein client sieht dann so aus:
PHP:
$soapClient = new SoapClient(null, array("location" => "http://127.0.0.1/ws/soapserver.php",
"uri" => "http://127.0.0.1/ws/"));
try {
	echo $soapClient->test("blablabla");				
} catch (SoapFault $exception) {
	print_r($exception);
}
 
Zurück