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

SQL Anywhere 11.0.1 (Deutsch) » SQL Anywhere Server - Programmierung » SQL Anywhere Datenzugriff-APIs » SQL Anywhere-Webdienste

 

SOAP-Dienste verwenden

Zu Veranschaulichung zahlreicher Webdienstfunktionen wird mit dem Beispieldienst einer einfachen Konvertierung von Fahrenheit zu Celsius begonnen.

♦  So richten Sie einen einfachen Webdienstserver ein
  1. Erstellen Sie eine Datenbank.

    dbinit ftc
  2. Starten Sie einen Server mit dieser Datenbank.

    dbsrv11 -xs http(port=8082) -n ftc ftc.db
  3. Stellen Sie mit Interactive SQL eine Verbindung zum Server her.

    dbisql -c "UID=DBA;PWD=sql;ENG=ftc"
  4. Erstellen Sie mit Interactive SQL einen Webdienst.

    CREATE SERVICE FtoCService
    TYPE 'SOAP'
    FORMAT 'XML'
    AUTHORIZATION OFF
    USER DBA
    AS CALL FToCConvertor( :temperature );
  5. Definieren Sie die gespeicherte Prozedur, die dieser Dienst aufrufen soll, um die Berechnungen auszuführen, die für die Konvertierung einer Temperatur von Fahrenheit in Celsius erforderlich sind:

    CREATE PROCEDURE FToCConvertor( temperature FLOAT )
    BEGIN
        SELECT ROUND((temperature - 32.0) * 5.0 / 9.0, 5) 
        AS answer;
    END;

Nun haben Sie einen laufenden SQL Anywhere-Webdienstserver, der zur Bearbeitung von Anforderungen bereit ist. Der Server hört SOAP-Anforderungen an Port 8082 ab.

Sie können nun diesen SOAP-Anforderungsserver testen. Der einfachste Weg hierzu ist die Verwendung eines anderen SQL Anywhere-Datenbankservers, der die SOAP-Anforderung übermittelt und die Antwort abfragt.

♦  So senden und empfangen Sie SOAP-Anforderungen
  1. Erstellen Sie eine andere Datenbank, die mit einem zweiten Server verwendet werden soll.

    dbinit ftc_client
  2. Starten Sie den Personal Server mit dieser Datenbank.

    dbeng11 ftc_client.db
  3. Stellen Sie mit einer anderen Instanz von Interactive SQL eine Verbindung zu dem Personal Server her.

    dbisql -c "UID=DBA;PWD=sql;ENG=ftc_client"
  4. Erstellen Sie mit Interactive SQL eine gespeicherte Prozedur.

    CREATE PROCEDURE FtoC( temperature FLOAT )
      URL 'http://localhost:8082/FtoCService'
      TYPE 'SOAP:DOC';

    Die URL-Klausel wird verwendet, um den SOAP-Webdienst zu referenzieren. Die Zeichenfolge 'http://localhost:8082/FtoCService' legt die URI-Adresse des Webdiensts fest, der verwendet wird. Dies ist ein Verweis auf den Webserver, der Port 8082 abhört.

    Das Standardformat für eine Webdienstanforderung ist SOAP:RPC. Das gewählte Format in diesem Beispiel ist SOAP:DOC. Dies ist ähnlich 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.

  5. Sie brauchen einen Wrapper für die gespeicherte Prozedur FtoC, weshalb Sie eine zweite gespeicherte Prozedur erstellen müssen.

    CREATE PROCEDURE FahrenheitToCelsius( temperature FLOAT )
    BEGIN
        DECLARE result LONG VARCHAR;   
        DECLARE err INTEGER;
        DECLARE crsr CURSOR FOR 
            CALL FtoC( temperature );
    
        OPEN crsr;
        FETCH crsr INTO result, err;
        CLOSE crsr;
    
        SELECT temperature, Celsius 
        FROM OPENXML(result, '//tns:answer', 1, result)
             WITH ("Celsius" FLOAT 'text()'); 
    END;

    Diese gespeicherte Prozedur agiert als abdeckende Prozedur für den Aufruf des Webdiensts. Die gespeicherte Prozedur FtoC gibt eine Ergebnismenge zurück, die von dieser gespeicherten Prozedur verarbeitet wird. Die Ergebnismenge ist eine einzelne XML-Zeichenfolge, die folgendermaßen aussieht.

    <tns:rowset xmlns:tns="http://localhost/ftc/FtoCService">
     <tns:row>
      <tns:answer>100</tns:answer>
     </tns:row>
    </tns:rowset>

    Die Funktion OPENXML wird verwendet, um die zurückgegebene XML-Zeichenfolge syntaktisch zu analysieren. Sie extrahiert den Wert, der den Wert in Celsius darstellt.

  6. Rufen Sie die gespeicherte Prozedur auf, um die Anforderung zu senden und die Antwort zu erhalten.

    CALL FahrenheitToCelsius(212);

    Die Temperatur in Fahrenheit und die Entsprechung in Celsius werden angezeigt.

    temperature Celsius
    212 100

Bislang wurde ein einfacher Webdienst dargestellt, der auf einem SQL Anywhere-Webserver ausgeführt wird. Sie haben gesehen, dass andere SQL Anywhere-Server mit diesem Webserver kommunizieren können. Es gab bislang wenig Kontrolle über den Inhalt der SOAP-Anforderungen und Antworten, die zwischen diesen Servern übertragen wurden. Im nächsten Abschnitt sehen Sie, wie dieser einfache Webdienst erweitert werden kann, indem Sie eigene SOAP-Header hinzufügen.

Hinweis

Der Webdienst kann vom selben Datenbankserver geliefert werden, darf aber nicht in derselben Datenbank wie die Clientfunktion residieren. Der Versuch, auf einen Webdienst in derselben Datenbank zuzugreifen, führt zum Fehler 403 Forbidden.

Hinweise zur SOAP-Header-Verarbeitung finden Sie unter SOAP-Header verwenden.