In dieser Lektion richten Sie einen neuen Datenbankserver ein und erstellen einen SOAP-Dienst für die Verarbeitung von eingehenden SOAP-Anforderungen. Der Server erwartet SOAP-Anforderungen mit einem Fahrenheit-Wert der in Celsius konvertiert werden muss.
Führen Sie zum Erstellen einer SQL Anywhere-Datenbank den folgenden Befehl aus:
dbinit ftc |
Starten Sie den Netzwerk-Datenbankserver mit dem folgenden Befehl:
dbsrv12 -xs http(port=8082) -n ftc ftc.db |
Dieser Befehl gibt an, dass der HTTP-Webserver an Port 8082 auf Anforderungen warten soll. Verwenden Sie eine andere Portnummer, wenn die Verwendung von 8082 in Ihrem Netzwerk nicht zulässig ist.
Stellen Sie in Interactive SQL mit dem folgenden Befehl eine Verbindung zum Datenbankserver her:
dbisql -c "UID=DBA;PWD=sql;SERVER=ftc" |
Erstellen Sie einen neuen SOAP-Dienst zum Annehmen der eingehenden Anforderungen.
Führen Sie in Interactive SQL das folgende SQL-Skript aus:
CREATE SERVICE FtoCService TYPE 'SOAP' FORMAT 'XML' AUTHORIZATION OFF USER DBA AS CALL FToCConvertor( :temperature ); |
Dieses Skript erstellt einen neuen SOAP-Dienst mit dem Namen FtoCService, der als Ausgabe in XML formatierte Zeichenfolgen generiert. Es ruft eine gespeicherte Prozedur mit dem Namen FToCConvertor auf, wenn ein Webclient eine SOAP-Anforderung an den Dienst sendet. Sie erstellen die FToCConvertor-Prozedur im nächsten Schritt.
Erstellen Sie die FToCConvertor-Prozedur für das Bearbeiten von eingehenden SOAP-Anforderungen. Diese Prozedur führt die erforderlichen Berechnungen zur Konvertierung eines vom Client gelieferten Fahrenheit-Werts in einen Celsius-Wert.
Führen Sie in Interactive SQL das folgende SQL-Skript aus:
CREATE PROCEDURE FToCConvertor( temperature FLOAT ) BEGIN DECLARE hd_key LONG VARCHAR; DECLARE hd_entry LONG VARCHAR; DECLARE alias LONG VARCHAR; DECLARE first_name LONG VARCHAR; DECLARE last_name LONG VARCHAR; DECLARE xpath LONG VARCHAR; DECLARE authinfo LONG VARCHAR; DECLARE namespace LONG VARCHAR; DECLARE mustUnderstand LONG VARCHAR; header_loop: LOOP SET hd_key = NEXT_SOAP_HEADER( hd_key ); IF hd_key IS NULL THEN -- no more header entries LEAVE header_loop; END IF; IF hd_key = 'Authentication' THEN SET hd_entry = SOAP_HEADER( hd_key ); SET xpath = '/*:' || hd_key || '/*:userName'; SET namespace = SOAP_HEADER( hd_key, 1, '@namespace' ); SET mustUnderstand = SOAP_HEADER( hd_key, 1, 'mustUnderstand' ); BEGIN -- parse the XML returned in the SOAP header DECLARE crsr CURSOR FOR SELECT * FROM OPENXML( hd_entry, xpath ) WITH ( alias LONG VARCHAR '@*:alias', first_name LONG VARCHAR '*:first/text()', last_name LONG VARCHAR '*:last/text()' ); OPEN crsr; FETCH crsr INTO alias, first_name, last_name; CLOSE crsr; END; -- build a response header -- based on the pieces from the request header SET authinfo = XMLELEMENT( 'Authentication', XMLATTRIBUTES( namespace as xmlns, alias, mustUnderstand ), XMLELEMENT( 'first', first_name ), XMLELEMENT( 'last', last_name ) ); CALL SA_SET_SOAP_HEADER( 'authinfo', authinfo ); END IF; END LOOP header_loop; SELECT ROUND((temperature - 32.0) * 5.0 / 9.0, 5) AS answer; END; |
Die Funktion NEXT_SOAP_HEADER wird in einer LOOP-Struktur verwendet, um eine Iteration durch alle Headernamen in einer SOAP-Anforderung durchzuführen. Die Schleife wird beendet, wenn die Funktion NEXT_SOAP_HEADER den Wert NULL zurückgibt.
Diese Funktion führt die Iteration durch die Header nicht notwendigerweise in derselben Reihenfolge durch, in der sie in der SOAP-Anforderung aufgeführt sind.
Die Funktion SOAP_HEADER gibt den Headerwert zurück oder NULL, wenn der Headername nicht vorhanden ist. Die FToCConvertor-Prozedur sucht nach einem Header mit dem Namen Authentication und extrahiert die Headerstruktur, einschließlich der Attribute @namespace und mustUnderstand.
Im Folgenden finden Sie ein XML-Zeichenfolge, die eine mögliche Authentication-Headerstruktur repräsentiert, wobei das Attribut @namespace den Wert "SecretAgent" und mustUnderstand den Wert 1 hat:
<Authentication xmlns="SecretAgent" mustUnderstand="1"> <userName alias="99"> <first>Susan</first> <last>Hilton</last> </userName> </Authentication> |
Die OPENXML-Systemprozedur in der SELECT-Anweisung wird zum Extrahieren von Daten aus der XML Zeichenfolge verwendet, wobei die xpath-Zeichenfolge den Wert "/*:Authentication/*:userName" erhält und dann die Ergebnismenge in der Variablen crsr speichert. Weitere Hinweise zur Systemprozedur OPENXML finden Sie unter openxml-Systemprozedur.
Die SET-Anweisung wird zum Erstellen einer SOAP-Antwort im XML-Format verwendet, die an den Client gesendet wird. Im Folgenden finden Sie eine XML-Zeichenfolge, die eine mögliche SOAP-Antwort repräsentiert. Sie basiert auf dem weiter oben aufgeführten Beispiel mit der Authentication-Headerstruktur.
<Authentication xmlns="SecretAgent" alias="99" mustUnderstand="1"> <first>Susan</first> <last>Hilton</last> </Authentication> |
Die Systemprozedur SA_SET_SOAP_HEADER wird zum Senden der SOAP-Antwort an den Client verwendet.
Die endgültige SELECT-Anweisung wird zum Konvertieren des gelieferten Fahrenheit-Werts in einen Celsius-Wert verwendet. Diese Informationen werden dann wieder an den Client weitergegeben.
![]() |
Kommentieren Sie diese Seite in DocCommentXchange.
|
Copyright © 2010, iAnywhere Solutions, Inc. - SQL Anywhere 12.0.0 |