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

SQL Anywhere 12.0.1 (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 eines Webservers 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.

 Einrichten eines Datenbankservers für den Empfang von SOAP-Anforderungen und das Senden von SOAP-Antworten
  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 eines neuen DISH-Dienstes zum Annehmen der eingehenden Anforderungen.

    Führen Sie die folgende SQL-Anweisung in Interactive SQL aus:

    CREATE SERVICE soap_endpoint 
        TYPE 'DISH'
        AUTHORIZATION OFF
        SECURE OFF
        USER DBA;

    Diese Anweisung erstellt einen neuen DISH-Dienst mit dem Namen soap_endpoint, der die eintreffenden SOAP-Dienstanforderungen abwickelt.

  5. Erstellen Sie einen neuen SOAP-Dienst für die Konvertierung von Fahrenheit zu Celsius.

    Führen Sie die folgende SQL-Anweisung in Interactive SQL aus:

    CREATE SERVICE FtoCService
        TYPE 'SOAP'
        FORMAT 'XML'
        AUTHORIZATION OFF
        USER DBA
        AS CALL FToCConvertor( :temperature );

    Diese Anwendung 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.

  6. 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 hierzu die folgende SQL-Anweisung in Interactive SQL 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. Das Header-Attribut @namespace ist ein spezielles SQL Anywhere-Attribut, das zum Zugriff auf den Namespace (xmlns) des angegebenen Headereintrags verwendet wird.

    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 führt eine syntaktische Analyse der XML-Header-Zeichenfolge "/*:Authentication/*:userName" durch, um den Attributwert alias und den Inhalt der Tags first und last zu extrahieren. Die Ergebnismenge wird mit einem Cursor verarbeitet, um die drei Spaltenwerte abzurufen.

    Sie haben nun alle gewünschten Informationen, die an den Webdienst übergeben wurden. Sie haben die Temperatur in Fahrenheit und einige zusätzliche Attribute, die dem Webdienst in einem SOAP-Header übergeben wurden. Sie können den Namen und den Alias suchen, die übergeben wurden, um festzustellen, ob die Person für die Verwendung des Webdienstes autorisiert ist. Diese Übung wird jedoch nicht in dem Beispiel gezeigt.

    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 Einrichten des SOAP-Antwort-Headers verwendet, der an den Client gesendet wird.

    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.

Sie haben nun einen laufenden SQL Anywhere-Webserver, der einen Dienst für die Konvertierung der Temperaturen von Fahrenheit in Celsius bereitstellt. Dieser Dienst verarbeitet einen SOAP-Header vom Client und sendet eine SOAP-Antwort zurück an den Client. Im nächsten Abschnitt entwickeln Sie ein Beispiel für einen Client, der SOAP-Anforderungen an den Webserver senden und SOAP-Antworten vom Webserver empfangen kann.

 Siehe auch