Hallo zusammen,
ich habe eine kurze Frage:
Ich baue gerade ein winziges PHP-Script mit einem Soap-Server & -Client. Der Server hat die Funktion "delete", "edit" und "insert".
Alle 3 Funktionen haben EINEN Parameter von einem Datentyp, den ich in der WSDL-Datei selber definiere. Dies ist ein complexType, der angibt, wie ein XML Request, der an den Server gesendet wird, auszusehen hat. Sieht der XML-Baum NICHT so aus, wie von mir per complexType im WSDL definiert, so soll ein Fehler geworfen werden.
Um mal ein anderes (einfacheres) Beispiel zu zeigen:
Kurz: Der Server soll eine einfache Rechenaufgabe ausführen. Dabei werden 2 Parameter von der Funktion erwartet. Die beiden Parameter müssen laut WSDL-Datei jeweils INTEGER sein.
Jedoch ist es auch hier VÖLLIG egal, welche Datentypen ich als Parameter übergebe.
Server.php
Client.php
Math.wsdl
Kann mir einer einen Tipp geben, was ich falsch mache?
ich habe eine kurze Frage:
Ich baue gerade ein winziges PHP-Script mit einem Soap-Server & -Client. Der Server hat die Funktion "delete", "edit" und "insert".
Alle 3 Funktionen haben EINEN Parameter von einem Datentyp, den ich in der WSDL-Datei selber definiere. Dies ist ein complexType, der angibt, wie ein XML Request, der an den Server gesendet wird, auszusehen hat. Sieht der XML-Baum NICHT so aus, wie von mir per complexType im WSDL definiert, so soll ein Fehler geworfen werden.
Um mal ein anderes (einfacheres) Beispiel zu zeigen:
Kurz: Der Server soll eine einfache Rechenaufgabe ausführen. Dabei werden 2 Parameter von der Funktion erwartet. Die beiden Parameter müssen laut WSDL-Datei jeweils INTEGER sein.
Jedoch ist es auch hier VÖLLIG egal, welche Datentypen ich als Parameter übergebe.
Server.php
PHP-Code:
<?php
require_once('math.php');
$server = new SoapServer("math.wsdl");
$server->setClass('mathfunctions');
$server->addFunction("add");
$server->handle();
?>
PHP-Code:
<?php
class client {
protected $client;
function __construct() {
$this->client = new SoapClient("http://localhost/www/webservice/server.php?wsdl");
}
function add() {
return $this->client->__soapCall('add', array(10,2));
}
}
try {
$client = new SoapClient("http://localhost/www/webservice/Server.php?wsdl");
echo $client->add(100,7) . '<hr>';
} catch(SoapFault $e) {
echo '<pre>';print_r($e);echo '</pre>';
}
?>
Code:
<?xml version ='1.0' encoding ='UTF-8' ?> <definitions name='Math' targetNamespace='http://localhost/www/webservice/Math' xmlns:tns='http://localhost/www/webservice/Math' 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='addRequest'> <part name='a' type='xsd:int'/> <part name='b' type='xsd:int'/> </message> <message name='addResponse'> <part name='Result' type='xsd:int'/> </message> <portType name='addPortType'> <operation name='add'> <input message='tns:addRequest'/> <output message='tns:addResponse'/> </operation> </portType> <binding name='addBinding' type='tns:addPortType'> <soap:binding style='rpc' transport='http://schemas.xmlsoap.org/soap/http'/> <operation name='add'> <soap:operation soapAction='urn:Math#add'/> <input> <soap:body use='encoded' namespace='urn:Math' encodingStyle='http://schemas.xmlsoap.org/soap/encoding/'/> </input> <output> <soap:body use='encoded' namespace='urn:Math' encodingStyle='http://schemas.xmlsoap.org/soap/encoding/'/> </output> </operation> </binding> <service name='addService'> <port name='addPort' binding='tns:addBinding'> <soap:address location='http://localhost/www/webservice/server.php'/> </port> </service> </definitions>
Kommentar