Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 12.0.0 (Deutsch) » SQL Anywhere Server - Programmierung » HTTP-Webdienste » Beispiele für HTTP-Webdienste » Praktische Einführung: Verwenden von SQL Anywhere für den Zugriff auf einen SOAP/DISH-Dienst

 

Lektion 1: Einrichten einer Webserver-Datenbank für den Empfang von SOAP-Anforderungen und das Senden von SOAP-Antworten

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.

 ♦  So richten Sie einen Datenbankserver für den Empfang von SOAP-Anforderungen und das Senden von SOAP-Antworten ein
  1. Führen Sie zum Erstellen einer SQL Anywhere-Datenbank den folgenden Befehl aus:

    dbinit ftc
  2. 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.

  3. Stellen Sie in Interactive SQL mit dem folgenden Befehl eine Verbindung zum Datenbankserver her:

    dbisql -c "UID=DBA;PWD=sql;SERVER=ftc"
  4. 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.

  5. 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.

    Hinweis

    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.

 Siehe auch