In dieser Lektion richten Sie einen Webclient ein, der SOAP-Anforderungen sendet und SOAP-Antworten empfängt.
Voraussetzungen
In dieser Lektion wird davon ausgegangen, dass Sie einen Webserver gemäß den Anweisungen in der vorherigen Lektion eingerichtet haben. Siehe Lektion 1: Einrichten eines Webservers für den Empfang von SOAP-Anforderungen und das Senden von SOAP-Antworten.
In dieser Lektion wird davon ausgegangen, dass Sie die Rollen und Privilegien haben, die im Abschnitt "Privilegien" am Anfang dieser praktischen Einführung aufgeführt sind: Praktische Einführung: Verwenden von SQL Anywhere für den Zugriff auf einen SOAP/DISH-Dienst.
Kontext und Bemerkungen
Diese Lektion enthält mehrere Verweise auf localhost. Verwenden Sie statt localhost den Hostnamen oder die IP-Adresse des Webservers aus Lektion 1, wenn der Webclient nicht auf demselben Computer ausgeführt wird wie der Webserver.
Führen Sie den folgenden Befehl aus, um eine SQL Anywhere-Datenbank zu erstellen:
dbinit -dba DBA,sql ftc_client |
Starten Sie den Datenbankserver mit dem folgenden Befehl:
dbsrv16 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 OR REPLACE PROCEDURE FtoC( fahrenheit 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". Es ist ähnlich wie "SOAP:RPC", ermöglicht aber eine größere Vielfalt von Datentypen. SOAP-Anforderungen werden immer als XML-Dokumente gesendet. Die Methode zum Senden von SOAP-Anforderungen ist HTTP:POST.
Die Ersetzungsvariablen (inoutheader, inheader) in einer Webdienst-Clientprozedur wie FtoC müssen alphanumerisch 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 OR REPLACE PROCEDURE FahrenheitToCelsius( Fahrenheit 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( Fahrenheit, 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 Fahrenheit, 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.
![]() |
Kommentieren Sie diese Seite in DocCommentXchange.
|
Copyright © 2013, SAP AG oder ein SAP-Konzernunternehmen. - SAP Sybase SQL Anywhere 16.0 |