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 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. Es wird dabei davon ausgegangen, dass Sie einen Webserver entsprechend der Anweisungen in der vorherigen Lektion eingerichtet haben. Weitere Hinweise zum in dieser Lektion beschriebenen Einrichten eines Datenbankservers für die Verarbeitung der SOAP-Anforderungen vom Client finden Sie unter Lektion 1: Einrichten eines Webservers für den Empfang von SOAP-Anforderungen und das Senden von SOAP-Antworten.

Hinweis

Diese Lektion enthält mehrere Referenzen auf localhost. Verwenden Sie die IP-Adresse des Webservers aus Lektion 1 anstelle von localhost, wenn der Webclient nicht auf demselben Computer wie der Server ausgeführt wird.

 Einrichten eines Datenbankclients für das Senden von SOAP-Anforderungen und den Empfang von SOAP-Antworten
  1. Führen Sie zum Erstellen einer SQL Anywhere-Datenbank den folgenden Befehl aus:

    dbinit ftc_client
  2. Starten Sie den Personal Datenbankserver mit folgendem Befehl:

    dbsrv12 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 PROCEDURE FtoC( temperature 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. Dies ist ähnlich wie SOAP:RPC, doch es ermöglicht eine größere Gruppe von Datentypen. SOAP-Anforderungen werden immer als XML-Dokumente gesendet. Die Methode zum Senden von SOAP-Anforderungen ist HTTP:POST.

    Die Ersetzungsvariablen in einer SQL Anywhere-Clientprozedur (inoutheader, inheader) müssen alphanummerisch 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 PROCEDURE FahrenheitToCelsius( temperature 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( temperature, 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 temperature, 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.

Im nächsten Abschnitt senden Sie eine SOAP-Anforderung an den Webserver und überprüfen die SOAP-Antwort.

 Siehe auch