In dieser Lektion richten Sie einen Webclient ein, der SOAP-Anforderungen sendet und SOAP-Antworten empfängt. Es wird dabei davon ausgegangen, dass Sie einen Webserver entsprechend der Anweisungen in der vorherigen Lektion eingerichtet haben. Weitere Hinweise zum in dieser Lektion beschriebenen Einrichten eines Datenbankservers für die Verarbeitung der SOAP-Anforderungen vom Client finden Sie unter Lektion 1: Einrichten eines Webservers für den Empfang von SOAP-Anforderungen und das Senden von SOAP-Antworten.
Diese Lektion enthält mehrere Referenzen auf localhost. Verwenden Sie die IP-Adresse des Webservers aus Lektion 1 anstelle von localhost, wenn der Webclient nicht auf demselben Computer wie der Server ausgeführt wird.
Führen Sie zum Erstellen einer SQL Anywhere-Datenbank den folgenden Befehl aus:
dbinit ftc_client |
Starten Sie den Personal Datenbankserver mit folgendem Befehl:
dbsrv12 ftc_client.db |
Stellen Sie in Interactive SQL mit dem folgenden Befehl eine Verbindung zur Datenbank her:
dbisql -c "UID=DBA;PWD=sql;SERVER=ftc_client" |
Erstellen Sie eine neue gespeicherte Prozedur zum Senden von SOAP-Anforderungen an einen DISH-Dienst.
Führen Sie die folgende SQL-Anweisung in Interactive SQL aus:
CREATE PROCEDURE FtoC( temperature FLOAT, INOUT inoutheader LONG VARCHAR, IN inheader LONG VARCHAR ) URL 'http://localhost:8082/soap_endpoint' SET 'SOAP(OP=FtoCService)' TYPE 'SOAP:DOC' SOAPHEADER '!inoutheader!inheader'; |
Die Zeichenfolge http://localhost:8082/soap_endpoint in der URL-Klausel gibt an, dass der Webserver auf localhost ausgeführt wird und Port 8082 überwacht. Der gewünschte DISH-Webdienst hat den Namen soap_endpoint und dient als SOAP-Endpunkt.
Die SET-Klausel gibt den Namen des SOAP-Vorgangs oder Diensts FtoCService an, der aufgerufen werden soll.
Das Standardformat für eine Webdienstanforderung ist SOAP:RPC. Das gewählte Format in diesem Beispiel ist SOAP:DOC. Dies ist ähnlich wie SOAP:RPC, doch es ermöglicht eine größere Gruppe von Datentypen. SOAP-Anforderungen werden immer als XML-Dokumente gesendet. Die Methode zum Senden von SOAP-Anforderungen ist HTTP:POST.
Die Ersetzungsvariablen in einer SQL Anywhere-Clientprozedur (inoutheader, inheader) müssen alphanummerisch sein. Wenn der Webdienstclient als Funktion deklariert wird, sind seine Parameter auf den IN-Modus beschränkt (sie können von der aufgerufenen Funktion nicht zugewiesen werden). Aus diesem Grund werden OPENXML und andere Zeichenfolgenfunktionen verwendet, um die Informationen des SOAP-Antwort-Headers zu extrahieren.
Erstellen Sie eine Wrapper-Prozedur, die zwei spezielle SOAP-Anforderungs-Headereinträge erstellt, diese an die Prozedur FtoC übergibt und Serverantworten verarbeitet.
Führen Sie hierzu die folgende SQL-Anweisung in Interactive SQL aus:
CREATE PROCEDURE FahrenheitToCelsius( temperature FLOAT ) BEGIN DECLARE io_header LONG VARCHAR; DECLARE in_header LONG VARCHAR; DECLARE result LONG VARCHAR; DECLARE err INTEGER; DECLARE crsr CURSOR FOR CALL FtoC( temperature, io_header, in_header ); SET io_header = '<Authentication xmlns="SecretAgent" ' || 'mustUnderstand="1">' || '<userName alias="99">' || '<first>Susan</first><last>Hilton</last>' || '</userName>' || '</Authentication>'; SET in_header = '<Session xmlns="SomeSession">' || '123456789' || '</Session>'; MESSAGE 'send, soapheader=' || io_header || in_header; OPEN crsr; FETCH crsr INTO result, err; CLOSE crsr; MESSAGE 'receive, soapheader=' || io_header; SELECT temperature, Celsius FROM OPENXML(result, '//tns:answer', 1, result) WITH ("Celsius" FLOAT 'text()'); END; |
Die erste SET-Anweisung erstellt die XML-Repräsentation eines SOAP-Headereintrags, um dem Webserver die Anmeldeinformationen des Benutzers mitzuteilen:
<Authentication xmlns="SecretAgent" mustUnderstand="1"> <userName alias="99"> <first>Susan</first> <last>Hilton</last> </userName> </Authentication> |
Die zweite SET-Anweisung legt die XML-Repräsentation eines SOAP-Headereintrags fest, um die Clientsitzungs-ID zu verfolgen:
<Session xmlns="SomeSession">123456789</Session> |
Die OPEN-Anweisung sorgt dafür, dass die FtoC-Prozedur aufgerufen wird, die eine SOAP-Anforderung an den Webserver sendet und dann die Antwort vom Webserver verarbeitet. Die Antwort enthält einen Header, der in inoutheader zurückgegeben wird.
Im nächsten Abschnitt senden Sie eine SOAP-Anforderung an den Webserver und überprüfen die SOAP-Antwort.
![]() |
Kommentieren Sie diese Seite in DocCommentXchange.
|
Copyright © 2012, iAnywhere Solutions, Inc. - SQL Anywhere 12.0.1 |