Webservices mit PHP und NuSOAP - WSDL-Support -
Dienstag, 06. Januar 2004 12:54
WSDL ist die Beschreibung des Webservices und besteht aus den Komponenten: Types, Messages, Operations, Port-Type, Binding, Port und Service.
(kurz gesagt: ein WSDL-File beschreibt was ein Webservice wie liefern kann)
SOAP-Server mit WSDL
der WSDL-Support wird durch die Methode configureWSDL() initialisiert, und erwartet als Parameter den Servicenamen und den Namespace.
$server->configureWSDL('hellowsdl', 'urn:hellowsdl');
oder
$server->configureWSDL('InteropTest','http://soapinterop.org/');
dann wird der WSDL-Schema-Typ für den Namespace gesetzt
$server->wsdl->schemaTargetNamespace = 'urn:hellowsdl';
oder
$server->wsdl->schemaTargetNamespace = 'http://soapinterop.org/xsd/';
jetzt noch eine Funktion mit der Methode register() registrieren
$server->register('hello', // method name
array('name' => 'xsd:string'), // input parameters
array('return' => 'xsd:string'), // output parameters
'urn:hellowsdl', // namespace
'urn:hellowsdl#hello', // soapaction
'rpc', // style
'encoded', // use
'Says hello to the caller' // documentation
);
und das vollständige Script:
<?php
require_once('nusoap.php');
$oServer = new soap_server();
$oServer->configureWSDL('hellowsdl', 'urn:hellowsdl');
$oServer->wsdl->schemaTargetNamespace = 'urn:hellowsdl';
$oServer->register('hallo', // method name
array('name' => 'xsd:string'), // input parameters
array('return' => 'xsd:string'), // output parameters
'urn:hellowsdl', // namespace
'urn:hellowsdl#hallo', // soapaction
'rpc', // style
'encoded', // use
'Says hello to the caller' // documentation
);
function hallo($sName) {
return 'Hallo, ' . $sName;
}
$oServer->service($HTTP_RAW_POST_DATA);
?>
SOAP-Client mit WSDL-Unterstützung
<?php
require_once('nusoap.php');
$oClient = new soapclient('phphack/hellowsdl.php?wsdl', true);
$bError = $oClient->getError();
if ($bError) {
echo '<h2>Constructor error</h2><pre>'.$bError.'</pre>';
}
$result = $oClient->call('hello', array('name' => 'Bytefresser'));
if ($oClient->fault) {
print_r($result);
} else {
$bError = $oClient->getError();
if ($bError) {
echo '<h2>Error</h2><pre>'.$bError.'</pre>';
} else {
echo '<h2>Result</h2><pre>';
print_r($result);
echo '</pre>';
}
}
?>
weitere Beiträge zum Thema PHP/NuSOAP: