# PHP SOAP ich Kriegs einfach nicht hin!



## jackisback (16. August 2007)

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 
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 
$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


```
<?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


----------



## Michael Engel (17. August 2007)

Hast du denn diese WSDL Datei erstellt? Sind die Dateirechte so das das Client Script darauf zugreifen darf?


----------



## jackisback (17. August 2007)

Nein ich habe ein Tutoruial benutzt das aus 2004 stamt hier mal der Link versucht es mal und meldet euch ob es geklappt hat

http://www.tutorials.de/forum/php-tutorials/166733-php5-einstieg-soap.html


----------



## typoelement (23. August 2007)

mal die Pfade anschaun? vielleicht hilfts weiter

example.com?


----------



## kieste (29. August 2007)

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.


----------



## kieste (30. August 2007)

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.


----------



## Tobi81 (16. September 2007)

In dem Tutorial ist ein Fehler drin:


```
<portType name='TestServerPortType'> 
  <operation name='addiere'> 
    <input message='tns:addiereAnfrage'/> 
    <output message='tns:addiereAnwort'/> 
  </operation> 
</portType>
```
Es sollte _tns:addiereAn*t*wort_ und nicht _tns:addiereAnwort_ heissen!


----------



## EnteTaylor (12. November 2008)

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

```
$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);
}
```


----------

