Ich wollte noch auf die Nutzung des SOAP-Servers mit Word (2000) hinaus.
Nutzung mit dem SOAP-Toolkit von Microsoft
Diese älteren Office-Versionen haben im Gegensatz zur Methode mit .net keinen direkten Zugriff auf die SOAP-Methoden. Dies lässt sich aber mit Microsofts SOAP-Toolkit nachrüsten. Microsoft schreibt zwar, dass das Toolkit durch .net veraltet sei, bietet aber sowohl das komplette SDK wie auch das verteilbare Paket zum Download an.
Damit wird die Nutzung des Webservices ziemlich einfach. Unter Extras-Verweise muß ein Verweis zum Microsoft SOAP Toolkit hinzugefügt werden.
In der Prozedur benötigen wir zunächst ein entsprechendes Objekt:
Dim soap As SoapClient
Set soap = New SoapClient
Mit diesem Objekt wird die WSDL-Datei abgeholt. Im Anschluss daran stehen die per Web-Service veröffentlichten Funktionen als Methoden des Objekts zur Verfügung. Für uns heißt das:
With soap
' Hole die Funktionen aus der Beschreibungsdatei
.mssoapinit "http://www.example.com/soapserver.php?wsdl."
' Und jetzt tu was...
ergebnis = .suche("Suchbegriff")
End With
Dabei scheint es wichtig zu sein, im nuSoap einen Namespace zu verwenden. Ohne Namespace-Definition erhalte ich einen VB-Fehler, mit keinen.
Nutzung von PocketSOAP
Eine weitere nette Bibliothek ist PocketSOAP von Simon Fell. Nachdem man auch hier unter Extras–Verweise diese Bibliothek hinzugefügt hat, holt folgende Code die Suchergebnisse ab:
Dim SOAP As New CoEnvelope
Dim HTTP As New HTTPTransport
Dim Result() As String
With SOAP
.MethodName = "suche"
.Parameters.Create "sucheRequest", "Suchbegriff"
End With
HTTP.Send "http://www.example.com/soapserver.php", SOAP.Serialize
' parse the SOAP message
SOAP.Parse HTTP
' extract the return value
Result = SOAP.Parameters.Item(0).Value
Noch einfacher geht des mit dem „SOAP Proxy“-Object: Hier genügen folgende Zeilen:
Dim SOAPProxy As PSPROXYLib.CoSoapFactory
Dim SOAP As Object
Dim Result() As String
Set SOAPProxy = New PSPROXYLib.CoSoapFactory
Set SOAP = SOAPProxy.CreateProxy("http://www.example.com/soapserver.php")
Result = SOAP.suche(sucheRequest:="Suchbegriff")
Zu PocketSOAP gibt es derüber hinaus einen WSDL-Proxygenerator, der aus einer WSDL-Datei entsprechende Klassen für VB generiert. Damit stehen die über SOAP exportierten Funktionen als Methoden dieser Objekte zur Verfügung, was das Arbeiten mit diesen natürlich sehr angenehm macht.