HINWEIS
Nochmals die einzelnen Schritte im Detail:
1. Die Proxy-Klasse wird intern vom Client instanziiert, d.h. ein Objekt wird erzeugt, mit dem der Client
so arbeiten kann, als ob es sich um ein lokales Objekt handeln würde.
2. Bei Aufruf einer Methode der Proxy-Klasse werden vom Clientrechner die Parameter des Methodenauf-
rufs in eine SOAP-Meldung serialisiert und an den Webserver geschickt, wobei das im WSDL-
Dokument angegebene Format benutzt wird.
3. Während der Client auf die Antwort des Webdienstes wartet, werden im Server die SOAP-Meldung
deserialisiert und die angeforderte Webmethode ausgeführt.
4. Das Ergebnis der Webmethode wird wieder serialisiert und per SOAP an den Client zurückgeschickt.
5. Auf Basis des im WSDL-Dokument angegebenen Formats deserialisiert der Client die SOAP-Meldung
und kann sie als Rückgabewert vom Proxy-Objekt entgegennehmen.
Sie sehen, dass doch allerhand Overhead notwendig ist, um die Kommunikation zwischen Webdienstclient
und Webdienst zu verwalten. Dank der Funktionalität der Microsoft Office Soap Type Library läuft dieser
Vorgang aber weitestgehend automatisch ab, sodass Sie als Access-Anwender eigentlich gar nichts davon
merken.
Anforderungen an Webklassen
Für Webklassen gelten bestimmte Einschränkungen gegenüber normalen lokalen Klassen. Da sich ein Web-
dienst nichts »merken« kann, darf die Webklasse auch keine Eigenschaften (Properties) haben. Beim nächs-
ten Aufruf der Webmethode wäre eh alles wieder »vergessen«. Einfache Zustandsvariablen bleiben deshalb
wirkungslos, denn bei jedem erneuten Aufruf werden sie wieder mit ihren Anfangswerten initialisiert. Logi-
scherweise hat die Webdienstklasse auch nur einen leeren Konstruktor (also einen ohne Parameter). In der
Regel sind alle für die Ausführung der Web-Methode erforderlichen Parameter im Client vorzuhalten und
mit jedem Methodenaufruf aufs Neue zu übergeben.
Unser Client wiederum sollte nur soviel Intelligenz kapseln, wie es für die Entgegennahme der Benutzerein-
gaben und deren Weiterleitung an den Webdienst-Server unbedingt erforderlich ist. Gleiches gilt umge-
kehrt für die Darstellung der Serverantwort.
Dies führt letztendlich zum Paradoxon »schlauer aber vergesslicher« Server und »dummer aber merkfähiger
Client«, was eine ganze Reihe gravierender Änderungen bzw. Anpassungen nach sich zieht, um bereits
funktionierende lokale Klassen »webdiensttauglich« zu machen
Doch genug der Theorie, ein kleines Beispiel wird sicher viele offen Fragen beantworten.
Einen Webdienst mit Visual Studio 2005 erstellen
Voraussetzung für den Nachvollzug der folgenden Ausführungen ist eine Visual Studio 2005-Installation!
Wir entwerfen zunächst einen recht einfachen Webservice. Öffnen Sie dazu, wenn vorhanden, Visual
Studio 2005 und wählen Sie den Menüpunkt Datei/Neu/Website/ASP.NET-Webdienst. Als Speicherort legen
Sie bitte Dateisystem fest, alternativ können Sie das Projekt aber auch gleich auf dem IIS installieren.
857
Microsoft Access im Dialog mit Webdiensten
Kapitel 13: Programmschnittstellen
Abbildung 13.17 Erzeugen eines neuen Webdienstes
Der Visual Studio-Assistent erzeugt Ihnen bereits einen kompletten Rumpf mit einer HelloWorld-Methode:
Einbinden der Namespaces (ähnlich wie die Access-Verweise auf Libraries):
Imports System.Web
Imports System.Web.Services
Imports System.Web.Services.Protocols
Ableiten der Klasse:
<WebService(Namespace:="http://tempuri.org/")> _
<WebServiceBinding(ConformsTo:=WsiProfiles.BasicProfile1_1)> _
<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
Public Class Service
Inherits System.Web.Services.WebService
Die erste Webmethode:
<WebMethod()> _
Public Function HelloWorld() As String
Return "Hello World"
End Function
End Class
Diese Methode behalten wir gleich bei und fügen noch zwei zusätzliche Methoden an:
<WebMethod()> _
Public Function GetDetaildaten() As String()
Dim s(5) As String
858
HINWEIS
s(0) = "Zeile1"
s(1) = "Zeile2"
s(2) = "Zeile3"
s(3) = "Zeile4"
s(4) = "Zeile5"
s(5) = "Zeile6"
Return s
End Function
Obige Methode demonstriert die Rückgabe von Stringarrays, die folgende Methode erwartet einige Para-
meter, die wir der Einfachheit halber gleich im Debug-Fenster (Visual Studio) ausgeben werden:
<WebMethod()> _
Public Function NeuBestellung(ByVal kdnr As Long, ByVal artikelid As Long, ByVal anzahl _
As Long) As Boolean
Debug.Print("kdnr = " & kdnr)
Debug.Print("artikelid = " & artikelid)
Debug.Print("anzahl = " & anzahl)
Return True
End Function
Wir könnten die Daten auch in einer eigenen Tabelle speichern, aber dies hat mit dem eigentlichen Beispiel
nichts mehr zu tun und lenkt den Blick nur vom Wesentlichen ab.
Vergessen Sie nicht, die Methoden mit dem Attribut »<WebMethod()>« zu kennzeichnen. Andernfalls sind
diese nicht per SOAP zugänglich.
Starten Sie jetzt das Projekt in Visual Studio 2005 (
F5
) und Sie erhalten eine erste Testseite mit der
Beschreibung des Webdienstes:
Abbildung 13.18 Test des Webservice
859
Microsoft Access im Dialog mit Webdiensten

Get Microsoft Office Access 2007-Programmierung - Das Handbuch now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.