Web Services einfach konsumieren
Geschrieben von: Christian Holm Web Services sind dazu da um konsumiert zu werden! Die Erstellung eines Web Services mit klassischen Entwicklungstools wie Visual Basic 6 und Active Server Pages ist ja Dank des Microsoft SOAP Toolkits relativ einfach. Nach der Erstellung des Web Service soll der Client aber auch die Dienste benutzen, d.h. konsumieren können. Dieser Artikel zeigt Ihnen anhand eines einfachen Beispiels, wie das mit Hilfe des SOAP Toolkits geht. Im Artikel Web Services mit dem SOAP Toolkit erstellen haben wir einen einfachen Web Service erstellt, der einen String zurückliefert. Im heutigen Artikel zeige ich Ihnen, wie man diesen Web Service client-seitig konsumieren kann. Für das Konsumieren benötigt man das SOAP Toolkit, weitere Informationen dazu (und Download) finden sich im zuvor genannten Artikel. Der "Konsum"-Prozess (Ähnlichkeiten mit realen Bezügen nicht beabsichtigt) beginnt mit einem Request des Clients. Dieser Request stellt bei Verwendung unseres Web Services aus dem Artikel Web Services mit dem SOAP Toolkit erstellen einen Methodenaufruf dar. Eben dieser Request wird vom SoapClient Objekt entgegengenommen und erstellt einen SOAP Request der dem Web Server übergeben wird. Der Server bearbeitet dann den Request, führt die erhaltenen Anweisungen aus, und schickt das Ergebnis als SOAP Response wieder zurück zum Client. Dort formuliert der SoapClient aus der SOAP Response eine, für den Benutzer des Web Service lesbare Anwort, die das Ergebnis aus der Prozedur enthält. Bildlich gesprochen passiert also folgendes: Damit dieser Prozeß ablaufen kann, muß vorher das SoapClient Objekt von der jeweiligen Anwendung instanziert werden. Nachdem dies erfolgreich geschehen ist, initialisieren wir das Objekt mit der mssoapinit Methode, welche aus der WSDL (Web Services Description Language) Datei die nötigen Informationen für diesen Vorgang bezieht. Die Syntax der mssoapinit Methode sieht folgendermaßen aus: object.mssoapinit("WSDLFile", "ServiceName", "Port", "WSMLFile") Die Parameter dieser Methode bedeuten: <service name='SimpleWebService' > <portType name='SimpleWSSoapPort'> Nach der Initialisierung tritt der WSDLReader in Aktion. Dieses Objekt liest die von den WSDL und WSML Dateien bereitgestellten Informationen, die den Web Service beschreiben ein, und lädt diese in ein DOM (Document Object Model). Durch die nun erhaltenen Informationen (Methodenaufruf der zugänglichen Methode RetString) kann ein WSDLOperation Objekt erstellt werden. Dieses Objekt enthält Eigenschaften, die die IO Messages des Web Service betreffen. Danach erstellt der SoapClient für die RetString Methode einen SoapMapper und zusätzlich werden vom SoapClient Objekt die IO Messages (in unserem Fall wird nur ein Outputstring erwartet) in diesen geladen. Der SoapSerializer erstellt anhand des SoapMappers einen SoapRequest der dann zum Server geschickt und verarbeitet wird. Nach der serverseitigen Verarbeitung schickt der Server eine SOAP Response (den Outputstring) zum Client zurück. Das SoapClient Objekt nimmt diese Response entgegen, packt diese in den dafür vorgesehenen Outputteil des vorher erstellten SoapMappers und schickt dies zurück zur Client Applikation. Sehen wir uns nun aber die Theorie in einem einfachen Beispiel an. Es gibt viele Möglichkeiten um einen Web Service zu konsumieren. Die erste und gleichzeitig einfachste ist jene, den Methodenaufruf der von außen zugänglichen Methode(n) in eine VBScript Datei zu packen. Warum dies? Es ist, wie gesagt die einfachste und schnellste Möglichkeit einen Web Service zu testen, bevor man es mit einer GUI konsumiert. Wir erstellen also eine VBScript Datei (consumer.vbs), die die nötigen Anweisungen zum Konsumieren des Web Service beinhaltet: Option Explicit Dim SoapClient Set SoapClient = CreateObject("MSSOAP.SoapClient") On Error Resume Next Call SoapClient.mssoapinit("http://127.0.0.1/WSSoap/SimpleWebService.WSDL", _ "SimpleWebService", "SimpleWSSoapPort") If err <> 0 Then wscript.echo "Init Failure: " + err.description End If wscript.echo SoapClient.RetString If err <> 0 Then wscript.echo "Error: " + err.description wscript.echo "Error Code: " + SoapClient.faultcode wscript.echo "Error String: " + SoapClient.faultstring wscript.echo "Fault Actor: " + SoapClient.faultactor wscript.echo "Detailed Information: " + SoapClient.detail End If Da für Testzwecke auch eine Fehlerbehandlung notwendig ist, habe ich diese gleich miterstellt. Das SoapClient Object besitzt schon von Haus aus einige Properties, mit denen man eine mögliche Fehlerquelle diagnostizieren kann. Nach dem Speichern der Datei rufen wir das Command Prompt (cmd.exe) auf, und wechseln in das Verzeichnis, wo sich die WScript Datei befindet. Wir können nun mit cscript consumer.vbs den Web Service konsumieren. Bei erfolgreichem Ablauf präsentiert sich an der Kommandozeile folgendes Ergebnis: Da dieses Beispiel sehr einfach ist, schreiben wir schnell eine ASP Version, indem wir einfach den obigen Code etwas anpassen: <% Set SoapClient = CreateObject("MSSOAP.SoapClient") On Error Resume Next SoapClient.mssoapinit "http://127.0.0.1/WSSoap/SimpleWebService.WSDL" If err <> 0 Then Response.Write "Init Failure: " & Err.description End If SoapClient.RetString() If Err <> 0 Then Response.Write "<br><b>Error:</b> " & Err.description Response.Write "<br><b>Error Code:</b> " & SoapClient.faultcode Response.Write "<br><b>Error String:</b> " & SoapClient.faultstring Response.Write "<br><b>Fault Actor:</b> " & SoapClient.faultactor Response.Write "<br><b>Detailed Information:</b> " & SoapClient.detail End If %> Bei Ausführen dieser Datei bietet sich das gleiche - zugegebenermaßen einfallslose - Bild. Interessanter wird es aber wenn ein Fehler auftritt. Wenn ich nun gemeinerweise etwas an den Dateien "herumpfusche" (natürlich nur für die Demozwecke), präsentiert sich für des Entwickers Augen eine ausführliche Fehlerbeschreibung: Was ich damit demonstrieren wollte ist, daß man auf Fehlerbehandlung beim Konsumieren von Web Services nicht verzichten sollte. Es handelt sich ja schließlich um Services, die über Netzwerkverbindungen angesprochen werden - und diese als auch die Services selbst können ja einmal nicht verfügbar sein. SchlußbemerkungDieser Artikel zeigte Ihnen wie man auf altbewährte Art und Weise, also mit VBScript und ASP, einen Web Service konsumiert. Das Beispiel war mit Absicht einfach gehalten, um den ablaufenden Prozess verständlich zu machen. Download des CodesKlicken Sie hier, um den Download zu starten. Verwandte Artikel
Amazon.com Web Services 2.0 Wenn Sie jetzt Fragen haben...Wenn Sie Fragen rund um die in diesem Artikel vorgestellte Technologie haben, dann schauen Sie einfach bei uns in den Community Foren der deutschen .NET Community vorbei. Die Teilnehmer helfen Ihnen gerne, wenn Sie sich zur im Artikel vorgestellten Technologie weiterbilden möchten. Eine weitere sehr hilfreiche Resource ist das deutsche ASP.NET Wiki, das als zentrale Anlaufstelle für Tips, Tricks, Know How und alles Nützliche was man in seinem Alltag als (ASP).NET-Entwickler so braucht und entdeckt gedacht ist. Haben Sie Fragen die sich direkt auf den Inhalt des Artikels beziehen, dann schreiben Sie dem Autor! Unsere Autoren freuen sich über Feedback zu ihren Artikeln. Ein einfacher Klick auf die Autor kontaktieren Schaltfläche (weiter unten) und schon haben Sie ein für diesen Artikel personalisiertes Anfrageformular.
Und zu guter Letzt möchten wir Sie bitten, den Artikel zu bewerten. Damit helfen Sie uns, die Qualität der Artikel zu verbessern - und anderen Lesern bei der Auswahl der Artikel, die sie lesen sollten.
©2000-2006 AspHeute.com |