Windows Phone 7 App mit Zugriff auf PHP Webservice – Tutorial
Ich wollte meine ersten Versuche mit Windows Phone 7 machen. WP 7 ist ja noch taufrisch und dementsprechend mager sind die Artikel etc. die man über die WP7 Entwicklung findet. Hinzu kommt noch, dass die Tutorials mir persönlich in den meisten Fällen viel zu oberflächlich gestaltet sind. Das ist aber kein Problem von WP7 sondern fällt mir in den letzten Jahren immer häufiger auf.
Oft beginne ich neue Technologien von der GUI her zu erkunden. Natürlich habe ich mich schon mit Silverlight und WPF beschäftigt. Inzwischen habe ich meine Webseite komplett in Silverlight 4 realisiert. Allerdings war dies auch nur ein Kratzen an der Oberfläche (
, doppeldeutig).
Mir schwebte gleich von Anfang an vor, dass ich eine Anwendung (neudeutsch: App) testen will, die auf Webservices zugreift um Daten auszutauschen. Um die ganze Sache dann noch einen Tick spannender zu gestalten, sollte der Webservice nicht mit .NET sondern in PHP realisiert werden.
Ich hatte bis dato noch keinen WS unter Silverlight angesprochen und ich habe vorher auch noch keinen Service in PHP realisiert. Also beste Voraussetzungen um mir gleich die volle Packung Anfangsschwierigkeiten einzuhandeln
.
1. Step: Erstellen des PHP Webservice
Um einen Service mit Silverlight in Windows Phone 7 konsumieren zu können, müssen wir ja zuerst mal einen haben. Ich habe mir einen Service zum Einloggen mit Username und Passwort vorgestellt, der einfach zurückgibt, ob der User berechtigt ist oder nicht.
Hier der Code für den PHP Service (Datei loginCheck.php):
Beeindruckend einfach. Nicht wahr. Das “Problem” entsteht erst mit der notwendigen WSDL-Datei. Hier können wir den Entwicklern von Microsoft nur dankbar sein, dass wir Entwicklungswerkzeuge zur Hand haben, die einem diese Arbeit abnehmen. Bei PHP muss man die WSDL von Hand erstellen. Ein ziemlicher Krampf. Aber da muss man durch, wenn der Service eingebunden werden soll.
Hier also die WSDL Datei zu dem Service loginCheck
Bei dem Aufbau gibt es zwei Dinge zu beachten über welche ich selber gestolpert bin:
<soap:binding style=”document”
Da bei Silverlight nur asynchrone Services erlaubt sind, muss das Binding auf “document” eingestellt werden. Wenn hier “RPC” steht, kommt es zu einem Fehler beim Aufruf des Webservices!
Der zweite Punkt betrifft den SOAP Body.
<soap:body use=”literal”/>
Wenn hier anstatt “literal” “encoded” verwendet wird, dann produziert Visual Studio einen etwas seltsamen Fehler. Im ersten Moment kommt es nämlich zu keinem Fehler beim Einbinden der WSDL und Erstellen der Proxy Klassen! Ich habe nur schmerzlich meine Methode “loginCheck” vermisst. Diese wird nämlich von Visual Studio komplett ignoriert und steht somit nicht zur Verfügung. Erst die Änderung des SOAP Body auf “literal” schaffte dem Problem Abhilfe!!?!?
Also die meiste Zeit frisst in diesem Fall das Erstellen der WSDL Datei. Der Webservice an sich ist unter PHP wirklich schnell implementiert. Sollte jemand ein Werkzeug kennen, mit dessen Hilfe sich für PHP Webservices eine WSDL generieren lässt, so soll er es mich bitte wissen lassen. Ich habe selbst nach langer Suche nichts gefunden.
2. Windows Phone Anwendung
Nachdem der Service, den wir ansprechen wollen, läuft können wir uns der eigentlichen WP7 Applikation zuwenden. Ich verzichte hierbei auf Blend 4 und verwende Visual Studio 2010.
Da zum heutigen Zeitpunkt die Entwicklung für Windows Phone 7 nur mit C# möglich ist, wählt man unter Visual C# => Silverlight for Windows Phone, das Template Windows Phone Application.
Danach sollte man folgendes Bild auf dem Bildschirm haben
Als erstes ändere ich den Page- und den Application-Text. Dann packe ich die benötigten Steuerelemente auf die WP7 Page.
Damit hätten wir auch schon alle notwendigen Voraussetzungen um den Webservice anzusprechen. Natürlich ist der Username reiner Fake, da er in dem Service gar nicht geprüft wird. Der Vollständigkeit halber, verwenden wir diesen trotzdem.
Für jeden der, wie ich, bei der Textbox die Password Option in den Properties sucht, der Hinweis, dass es unter Silverlight ein eigenes Control für Passwörter gibt: PasswordBox!
Der Button Login soll unseren Service aufrufen und das Ergebnis des Aufrufs wird dann in der Textbox mit der Überschrift “Zugriff erlaubt” ausgegeben.
Bevor wir den PHP Service verwenden können, müssen wir diesen zuerst in unser Projekt einbinden. Denn hierfür haben wir uns schließlich die Finger an der WSDL Datei wund getippt
.
Also bei Project->Add Service Reference die WSDL Datei ausgewählt und GO klicken.
Jetzt wechseln wir für die Implementierung des Webservice-Aufrufs in die Code-Behind Datei der MainPage.xaml
Dank der guten Vorarbeit von Visual Studio beim Einbinden der Service Referenz, ist der Code zum Ausführen des Webservice nicht mehr die Welt.
Da der Code bei Silverlight nur asynchron ausgeführt werden kann, muss man den Eventhandler “loginCheckCompleted” implementieren. In diesem wird das Result des Services in die Textbox ausgegeben.
Und fertig ist die erste Windows Phone 7 Anwendung mit Aufruf eines in PHP geschriebenen Webservice!




You must be logged in to post a comment.