Silverlight & PHP – Teil 2 (PHP Webservice)

Ein Webservice ist eine gute Möglichkeit mit dem Silverlight Frontend zu kommunizieren. Doch wie erstellt man einen Webservice in PHP? Dieselbe Frage habe ich mir auch gestellt. Dank einer kleinen Zusatzkomponente (Nusoap Toolkit) ist es gar nicht so schwer bzw. gar nicht so umständlich. Die WSDL per Hand zu schreiben wäre nämlich doch sehr mühsam.

Mein CD-Manager muss beim Start erst einmal initialisiert werden. Bei der Initialisierung möchte ich wissen wann die Datenbank zuletzt aktualisiert worden ist und wie viele CDs in den einzelnen Kategorien vorhanden sind. Schön, dass es dafür bereits eine fertige Funktion in meinem PHP CD-Manager gibt. Die habe ich praktisch 1:1 übernommen. Die einzigen zwei Anpassungen an der Funktion waren der ConnectionString zur SQLite Datenbank und der Rückgabewert. Beim Rückgabewert habe ich mich für eine XML Struktur entschieden.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
function getHeader()
{
	$ConnectionString = 'sqlite:../../cdmanager/medlan.data';
	$dbh = new PDO($ConnectionString);
 
	$resultList = $dbh->prepare("SELECT count(*) FROM CD where CDTYPEID = 1");
	$resultList->execute();
	$result = ($resultList->fetch(PDO::FETCH_BOTH));
	$MaxiCount = $result[0];
 
	$resultList = $dbh->prepare("SELECT count(*) FROM CD where CDTYPEID = 2");
	$resultList->execute();
	$result = ($resultList->fetch(PDO::FETCH_BOTH));
	$AlbenCount = $result[0];
 
	$resultList = $dbh->prepare("SELECT count(*) FROM CD where CDTYPEID = 3");
	$resultList->execute();
	$result = ($resultList->fetch(PDO::FETCH_BOTH));
	$DoppelCount = $result[0];
 
	$resultList = $dbh->prepare("SELECT LastUpdate FROM Information");
	$resultList->execute();
	$result = ($resultList->fetch(PDO::FETCH_BOTH));
	$LastUpdate = $result[0];
 
	return '<Header><LastUpdate>'.$LastUpdate.'</LastUpdate><MaxiCount>'.$MaxiCount.'</MaxiCount><AlbenCount>'.$AlbenCount.'</AlbenCount><DoppelCount>'.$DoppelCount.'</DoppelCount></Header>';
}

Damit gab es gleich noch ein zweites Tutorial: Wie greift man auf SQLite Datenbanken in PHP zu. Der Code erklärt sich eigentlich von selbst. Datenbankverbindung aufbauen, Daten auslesen und Rückgabewert erstellen.
Doch wie macht man jetzt aus dieser Funktion einen WebService? Da kommt jetzt das NuSoap Toolkit ins Spiel.

1
include_once "nusoap.php";

Wir binden zuerst die nusoap.php in unser Projekt ein.
Anschließend erfolgt die Erstellung des Webservices

1
2
3
4
5
6
7
$ns = "http://webservices.project-medlan.de";
$server = new Soap_Server();
$server->configureWSDL('CDManager', $ns);
$server->wsdl->schemaTargetNamespace = $ns;
$server->soap_defencoding = 'utf-8';
$server->register('getHeader', array(), array('header' => 'xsd:string'), $ns, false, false, 'literal');
$server->service($HTTP_RAW_POST_DATA);

Zeile 1: Hier definieren wir uns einen Namespace für unseren Webservice (Beispiel: ‚http://webservices.project-medlan.de‘).
Zeile 2: Hier wird ein neues Soap_Server Objekt erzeugt.
Zeile 3: Der Name unseres Webservices wird festgelegt.
Zeile 4: Wir weisen der wsdl den Namespace zu.
Zeile 5: Encoding wird auf ‚UTF-8‘ festgelegt.
Zeile 6: Hier wird unsere Funktion ‚getHeader‘ registriert.
Der zweite Parameter der Funktion ‚register‘ wären die Übergabeparameter an unsere Funktion – wir haben in diesem Fall aber keine.
Der dritte Parameter ist der Rückgabewert unserer Funktion. Wir geben hier einen String zurück.
Der vierte Parameter ist der Namespace.
Parameter fünf (SoapAction) & sechs (Style) waren für mich jetzt nicht so interessant.
Umso wichtiger ist der siebte Parameter. Hier MUSS ‚literal‘ stehen um auf den Webservice von Silverlight aus zuzugreifen. Das Gegenstück zu ‚literal‘ ist ‚encoded‘. Wenn man jedoch an dieser Stelle ‚encoded‘ einsetzt, kann man zwar in Silverlight den Webservice einbinden, kann aber keine Funktionen aufrufen, da Silverlight ‚encoded‘ nicht unterstützt.
Zeile 7: Hier wird die Konfiguration des Services abgeschlossen – was dort allerdings genau passiert, entzieht sich meiner Kenntnis …

Das war’s dann auch schon. Die PHP Datei muss dann natürlich auf euren Webserver geladen werden. Über die URL http://eureUrl.de/CDManagerWebservice.php?wsdl kann die wsdl dann abgerufen werden. Bitte nicht vergessen auch die nusoap.php mit hochzuladen.

Hier nochmal der komplette PHP Webservice: PHP Webservice

In Teil 3 schauen wir uns die Silverlight Applikation an …

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert