DevTrain

Autor: Tobi Ulm

Einführung in SOAP

 SOAP, SOAP SOAP. Dieses Schlagwort ist schon seit längerer Zeit in aller Munde und bedeutet, Gott sei Dank nicht Seife, sondern Simple Object Access Protocoll. SOAP ist ein einfaches Protokoll für den Austausch von Daten und Informationen in einer dezentralisierten und verteilten Umgebung wie dem Internet. Dadurch wird es Ihren Applikationen ermöglicht miteinander über http zu kommunizieren und Komponenten auf anderen Systemen aufzurufen und auszuführen. Dies ist auf anderen Wegen und mit anderen Protokollen meist sehr schwierig, bzw. gar nicht möglich, da Hindernisse wie eine Firewall den zugriff auf Ihre Remote - Objekte verhindern. Ein weiterer Vorteil von SOAP ist die Plattform Unabhängigkeit.

Für SOAP sind folgende Kenntnisse ratsam:

-         XML

-         SDL (Service Description Language)

-         http (POST / GET)

-         WSDL (Web Service Description Language)

SOAP basiert auf dem offenem Standard XML und besteht aus folgenden drei Komponenten:

-         Dem SOAP Envelope welcher den Rahmen definiert, was in einer SOAP Message enthalten ist.

-         Den SOAP Entschlüsselungs Regeln welche eine Veröffentlichungseinheit definieren,  um Anwendungsspezifische Daten auszutauschen.

-         Und der SOAP RPC Darstellung die Remoteprozeduraufrufe und ? antworten wiedergibt.

SOAP lebt von Nachrichten und kommuniziert asynchron. Eine SOAP Nachricht (Message) besteht aus einem SOAP Envelope, einem optionalen SOAP ? Header und einem vorgeschriebenen SOAP ? Body. Im der SOAP Message steht die Funktion des Web Services die aufgerufen werden soll und eventuelle Parameter, die diese Funktion benötigt. Auf dem Enveleope (Umschlag) steht die Adresse des Web Services. Nach einem Aufruf einer Web Service Methode erfolgt ein sofortiger Response. Es gibt keine Events.  Soweit zur Definition einer SOAP Message, doch wie sieht so eine Nachricht IRL (InRealLife)aus?

Als erstes sehen wir uns den SOAP CALL vom Client zum Server an:
 <?xml version="1.0" ?>

<SOAP:Envelope xmlns:SOAP="HTTP://schemas.xmlsoap.org/soap/envelope/2000-03-01" encodingStyle="HTTP://schemas.xmlsoap.org/soap/envelope/2000-03-01">

       <SOAP:Body>

              <GetServerTime></GetServerTime>

       </SOAP:Body>

</SOAP:Envelope>

Diese SOAP Nachricht will am Server die GetServerTime() Funktion aufrufen. Der Client schickt nun an den Server diese Nachricht und dieser gibt folgenden Response zurück ( falls er eine solche Methode zur Verfügung stellt):

<?xml version="1.0" ?>

<SOAP:Envelope xmlns:SOAP="HTTP://schemas.xmlsoap.org/soap/envelope/2000-03-01" encodingStyle="HTTP://schemas.xmlsoap.org/soap/envelope/2000-03-01">

       <SOAP:Body>

              <GetServerTimeResponse>

                    <Now>4/10/2001 12:00:00 AM</Now>

              </GetServerTimeResponse>

       </SOAP:Body>

</SOAP:Envelope>

Auf der Client Seite bekommt man nun den Wert der Funktion zurückgesandt. 

Um einfach mit SOAP zu arbeiten, d.h. SOAP Calls zu erzeugen, empfehle ich Ihnen das SOAP Toolkit von Microsoft herunterzuladen http://msdn.microsoft.com/downloads/default.asp?URL=/code/sample.asp?url=/msdn-files/027/001/580/msdncompositedoc.xml

Dieses enthält verschiedene Komponenten, Samples und Dokumentationen wie

-         SDL Service Description Language soll ein XML Format bieten um die Service von Webservern abzufragen, bzw. dient als Metabeschreibung des Web Services

-         ROAP Remote Object Proxy Engine

-         Listener

SOAP ist das Protokoll. Für die Funktion benötigt man einen Listener der im Webserver implementiert wird. Dieser kann als ASP File oder als ISAPI Extensions implementiert sein.

Die Lösung mit ISAPI  sollte eigentlich schneller sein, muss aber in C++ entwickelt werden. ASP Seiten werden ganz klar mit VBScript entwickelt. Ein weiteres wichtiges Tool im SOAP Toolkit ist der SOAP Toolkit Wizard, welcher Ihnen von vorhandenen COM(ponenten) ein SDL File erzeugt, welches Sie benötigen um von Ihren Anwendungen heraus die Web Service Funktionen benutzen zu können.

Um sich einen größeren Programmieraufwand zu ersparen kann man mit der ROPE ( Remote Object Proxy Engine ) API arbeiten, welche mit dem SOAP Toolkit geliefert wird. Dieses ROPE Objekt ist wie ein Proxy zu verstehen, das als Buffer dient. ROPE ist eine Sammlung von mehreren Komponenten. Generell kann man diese Infrastruktur benutzen um entwedere in einem Client COM freundliche Remote Procedure Calls an SOAP Endpunkte (der WebService ansich) zu senden oder für einen SOAP Endpunkt einen Listener zu bauen. Sie müssen nur die ROPE.dll mit regsvr32.exe im System registrieren. Dank ROPE kann man zum Beispiel mit Visual Basic 6.0 ganz einfach einen SOAP Call erzeugen und eine Web Method eines Web Services konsumieren:
 Dim myProxy As New ROPE.Proxy ?Erzeugen des Proxys

myProxy.LoadServicesDescription icURI, "http://localhost/soapdemo/services.xml" Laden der Service Beschreibung

MsgBox (myProxy.GetServerTime()) ?Aufrufen der WebService Method


Erfasst am: 10.04.2001 - Artikel-URL: http://www.devtrain.de/news.aspx?artnr=422
© Copyright 2003 ppedv AG - http://www.ppedv.de