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

SAP Sybase SQL Anywhere 16.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 2: Einrichten eines Webclients zum Senden von SOAP-Anforderungen und Empfangen von SOAP-Antworten

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.

 Aufgabe
  1. Führen Sie den folgenden Befehl aus, um eine SQL Anywhere-Datenbank zu erstellen:

    dbinit -dba DBA,sql ftc_client
  2. Starten Sie den Datenbankserver mit dem folgenden Befehl:

    dbsrv16 ftc_client.db
  3. Stellen Sie in Interactive SQL mit dem folgenden Befehl eine Verbindung zur Datenbank her:

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

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

Ergebnisse

Sie haben nun einen Client, der SOAP-Anforderungen an den Webserver senden und SOAP-Antworten vom Webserver empfangen kann.

Nächste Schritte

In der nächsten Lektion senden Sie eine SOAP-Anforderung an den Webserver und überprüfen die SOAP-Antwort. Gehen Sie weiter zu Lektion 3: Senden einer SOAP-Anforderung und Empfangen einer SOAP-Antwort.

 Siehe auch