Webservice light

Manchmal kann es nützlich sein, Informationen über das Internet bereitzustellen – und damit ist diesmal nicht der Zugriff auf eine Datenbank auf einem Webserver gemeint. In diesem Fall soll eine Anwendung etwa selbst ermitteln können, ob es ein Update für sie gibt, oder sie soll Informationen wie etwa Registrierungsdaten zum Webserver des Benutzers übermitteln. Dieser Beitrag stellt eine kleine Lösung bereit, mit der Sie die notwendigen Daten auf einem Webserver bereitstellen, und zeigt, wie Sie diese Informationen per Access-Datenbank auslesen.

Dabei soll die Informationsbeschaffung keine Einbahnstraße sein: Ziel der Lösung dieses Beitrags ist es zunächst, dass Sie von einer Access-Anwendung aus eine Anfrage an einen Webserver schicken können.

Diese Anfrage soll aber durchaus auch noch Parameter enthalten können, die dann von einem entsprechenden Algorithmus auf dem Webserver ausgewertet und entsprechend beantwortet werden können.

PHP als Programmiersprache

Die in diesem Beitrag vorgestellte Lösung basiert serverseitig auf der Sprache PHP. Auch, wenn Sie sich als Leser dieses Magazins zumindest als Anwender von Microsoft-Produkten zu erkennen geben, scheinen die meisten Webanwendungen auf Unix/Linux-Servern zu laufen – dementsprechend ist die Chance, dass Sie die Möglichkeit zum Ausprobieren dieser Lösung auf einem Server mit PHP haben, relativ hoch. Die Portierung des hier vorgestellten, einfachen Codes auf eine andere Sprache sollte jedoch nicht allzu kompliziert sein.

Webservice light

Normalerweise verwendet man für solche Anforderungen einen Webservice. Dies ist jedoch nicht ganz trivial, sodass wir eine etwas vereinfachte Variante eines Webservice nutzen möchten, die auf einer einzigen .php-Seite basiert.

Die .php-Seite soll dabei die von der Anwendung abgeschickten Parameter auswerten und eine entsprechende Antwort zurücksenden.

Im einfachsten Fall sieht das wie folgt aus: Sie schicken vom Rechner aus eine Anfrage ab, die beispielsweise http://www.acciu.de/zeit.php lautet. Der Webserver soll dann ein XML-Dokument zurücksenden, das etwa so aussieht:

<xml version=''1.0''>
<zeit>18:37:20</zeit>

Dieses Dokument können wir mithilfe der MSXML-Bibliothek anschließend leicht auswerten.

Unser einfacher Webservice soll jedoch auch Parameter verarbeiten können. Diese werden beim Aufruf an den Link angehängt – zum Beispiel so:

<Webadresse>/update.phpversion=1.0.0.3

Die Webseite update.php soll nun anhand der übermittelten Version prüfen, ob es eine neuere Version gibt, und gegebenenfalls einen Link auf die neue Version übermitteln (den Ausdruck <Webadresse> in diesem und den folgenden Beispielen ersetzen Sie durch die entsprechende Webseite, beispielsweise http://www.access-im-unternehmen.de/index.php).

Auch solche Anforderungen kann unser im Anschluss vorgestellter Webservice light erledigen – grundsätzlich gibt es kaum Grenzen, sofern Sie sich die Programmierung der wenigen notwendigen PHP-Codezeilen zutrauen und auf einen Webserver mit PHP zugreifen können.

Technik zum Anfragen der XML-Antworten

Der erste interessante Teil der Implementierung ist die Übertragung der Webadresse mit den Parametern zum Webserver und das Auslesen der Antwort auf diese Anfrage.

Diese Technik können Sie grundsätzlich verwenden, um beliebige Webseiteninhalte oder auch Dateien herunterzuladen. Die erste Variante dieser Funktion sieht wie in Listing 1 aus und erwartet den Link zur einzulesenden Datei als Parameter. Sie liefert den Quellcode dieser Datei zurück:

Listing 1: Einfache Routine zum Herunterladen von Quelltexten

Public Function DownloadText(ByVal strDateiadresse As String) As Text
    Dim objXMLHTTP As MSXML2.XMLHTTP
    Set objXMLHTTP = New MSXML2.XMLHTTP
    With objXMLHTTP
        .Open "GET", strDateiadresse, True
        .send
        Do While Not .ReadyState = 4
            DoEvents
        Loop
        DownloadText = .responseText
    End With
End Function

Dazu verwendet sie das Objekt XMLHTTP der Bibliothek Microsoft XML, Version x.0, wobei x.0 für die neueste verfügbare Version steht (aktuell 6.0).

Dieses Objekt erlaubt es beispielsweise, Anfragen an einen Webserver zu senden und das von diesem gelieferte Resultat weiterzuverarbeiten. In diesem Falle rufen Sie die Anwendung beispielsweise so auf:

Debug.Print DownloadText("http://www.access-im-unternehmen.de")

Dies gibt, im Direktfenster eingesetzt, beispielsweise den kompletten Quelltext der angegebenen Internetseite aus.

Wenn Sie nun beispielsweise die aktuelle Version einer Software damit über das Internet verfügbar machen möchten, würden Sie etwa eine Datei wie die folgende mit der Nummer der aktuellsten Version auf einen Webserver legen:

<xml version=''1.0''>
<currentVersion>1.0.0.3</currentVersion>

Dann können Sie die Funktion DownloadText mit der Routine AktuelleVersionErmitteln aufrufen (s. Listing 2) und aus der gelieferten XML-Datei den Wert des Elements currentVersion auslesen.

Listing 2: Herunterladen und Auslesen einer bestimmten XML-Datei vom Webserver

Public Function AktuelleVersionErmitteln() As String
    Dim objXML As MSXML2.DOMDocument
    Dim strXML As String
    Dim strVersion As String
    Set objXML = New MSXML2.DOMDocument
    strXML = DownloadText("http://<Webadresse>/currentVersion.xml")
    objXML.loadXML strXML
    strVersion = objXML.selectSingleNode("currentVersion").nodeTypedValue
    AktuelleVersionErmitteln = strVersion
End Function

Bis hierhin kommen Sie sogar noch ohne PHP über die Runden – die Datei können Sie als .xml– oder auch als .html-Datei auf den Webserver legen. Wichtig ist nur, dass das Verzeichnis dieser Datei öffentlich zugreifbar ist.

Interaktiv

Interessanter wird es, wenn der Webserver selbst die Antwort auf die Anfrage erst per PHP-Skript erstellen soll. Im Beitrag Registrierung von Anwendungen (www.access-im-unternehmen.de/797 soll an einer Stelle das aktuelle Datum ermittelt werden, um der Manipulation beim Registrieren einer Anwendung vorzubeugen.

Dies setzt voraus, dass das PHP-Skript das Datum mit einer entsprechenden Prozedur ermittelt und erst dann das XML-Dokument mit dem Ergebnis zurücksendet.

Das PHP-Skript sieht wie folgt aus:

<php
    $date = date("d-m-Y");
    echo "<xml version=''1.0''>";
    echo "<currentDate>" . $date . "</currentDate>";
>

Das Auslesen übernimmt diesmal die Funktion aus Listing 3.

Ende des frei verfügbaren Teil. Wenn Du mehr lesen möchtest, hole Dir ...

den kompletten Artikel im PDF-Format mit Beispieldatenbank

diesen und alle anderen Artikel mit dem Jahresabo

Schreibe einen Kommentar