Dass man mit Entwicklungs-Umgebungen wie z.B. auch SharpDevelop (rechte Mautaste im Projekt -> "Web Referenz hinzufügen") über automatisiert erstellte Proxies sehr einfach auf SOAP RPC zugreifen kann, werden die meisten ja wissen.
Wer PHP-Dienste via NuSOAP anbietet, dem ist bestimmt auch schon aufgefallen, dass es ziemlich umständlich ist, wenn es darum geht, eigene Datentypen/Datenstrukturen zu erzeugen.
Deshalb hab ich eine kleine Erweiterungsklasse namens "SoapRpcService" geschrieben, die diesen Vorgang erheblich vereinfacht.
Hier ein kleines Beispiel, wobei ich die Objekte zur binären und Dateiübertragung hierfür einmal ausgelassen habe:
< ?php
/**
- Just an example of SoapRpcService.php
- @access public
- @author Holger Schadeck
*/
require_once (‘lib/SoapRpcService.php’);
function Test1() {
return ‘ich bin es, dein server’;
}
function Test2($iAmount = 0) {
$aData = array ();
for ($iCount = 0; $iCount < $iAmount; $iCount++) {
$aData[] = Test1();
}
return $aData;
}
function Test3($iAmount = 0) {
$aData = array ();
for ($iCount = 0; $iCount < $iAmount; $iCount++) {
$aData[] = array (
‘id’ => $iCount,
‘Data’ => $iCount . ‘.’ . $iCount,
‘Item’ => ‘item’ . $iCount,
‘Datum’ => date(‘Y-m-d’,
time()));
}
return $aData;
}
/** - Create service object
*/
$oServer = & new SoapRpcService();
/** - make function Test2 accesible
*/
$oServer->publish(‘Test1’, null, ‘string’, ‘Der Server spricht zu Dir’);
/** - create an array of integer object
*/
$oWsdlArrayOfInt = new WsdlArray(‘ArrayOfInt’, ‘int’);
/** - make function Test2 accesible
*/
$oServer->publish(‘Test2’, array (
‘Anzahl’ => ‘int’
), $oWsdlArrayOfInt, ‘Der Server spricht öfter zu Dir’);
/** - create a data structure object
*/
$oWsdlDataStruct = new WsdlStruct(‘DataStruct’, array (
‘id’ => ‘int’,
‘Data’ => ‘float’,
‘Item’ => ‘string’,
‘Datum’ => ‘date’
));
/** - create an array object of the data structure object
*/
$oWsdlArrayOfDataStruct = new WsdlArray(‘ArrayOfDataStruct’, $oWsdlDataStruct);
/** - make function Test3 accesible
*/
$oServer->publish(‘Test3’, array (
‘Anzahl’ => ‘int’
), $oWsdlArrayOfDataStruct, ‘Der Server liefert ein Array von Datenkonstrukten’);
/** - start the service
*/
$oServer->service($HTTP_RAW_POST_DATA);
?>
Die SoapRpcService Klasse samt NuSOAP (NuSOAPs soapserver Klasse ist umbenannt in soap_server wegen potentiellem Konflikt mit der PHP SOAP-Erweiterung)