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

 

Mit MIME-Typen arbeiten

Die TYPE-Klausel für die Client-Prozedur oder die Funktionsdefinition eines SQL Anywhere-Webdienstes ermöglicht die Angabe eines MIME-Typs. Mithilfe des Werts der MIME-Typspezifikation wird der Anforderungs-Header "Content-Type" eingerichtet und der Betriebsmodus so eingestellt, dass nur ein einzelner Aufrufparameter den Hauptteil der Anforderung auffüllen kann. Wenn ein Webdienstaufruf einer gespeicherten Prozedur (oder Funktion) erfolgt, nachdem Parameterersetzungen verarbeitet wurden, darf kein oder ein einziger Parameter verbleiben. Der Aufruf einer Webdienstprozedur mit NULL oder keinem Parameter (nach Ersetzungen) ergibt eine Anfrage ohne Hauptteil und eine Inhaltslänge von Null. Wenn kein MIME-Typ angegeben wird, ist das Verhalten unverändert. Parameternamen und -werte (Mehrfachparameter sind erlaubt) werden innerhalb des Hauptteils der HTTP-Anforderungen URL-kodiert.

Einige typische MIME-Typen umfassen Folgendes:

Mit den folgenden Schritten wird die Einrichtung eines MIME-Typs veranschaulicht. Im ersten Teil wird ein Webdienst eingerichtet, der benutzt werden kann, um die Einstellungen eines MIME-Typs zu testen. Im zweiten Teil wird gezeigt, wie ein MIME-Typ eingerichtet wird.

♦  Webdienstserver erstellen
  1. Erstellen Sie eine Datenbank.

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

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

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

    CREATE SERVICE EchoService
    TYPE 'RAW'
    USER DBA
    AUTHORIZATION OFF
    SECURE OFF
    AS CALL Echo(:valueAsXML);
  5. Erstellen Sie die gespeicherte Prozedur, die von diesem Dienst aufgerufen werden soll.

    CREATE PROCEDURE Echo( parm LONG VARCHAR )
    BEGIN
        SELECT parm; 
    END;

Nun haben Sie einen laufenden SQL Anywhere-Webdienstserver, der zur Bearbeitung von Anforderungen bereit ist. Der Server wartet an Port 8082 auf HTTP-Anforderungen.

Um diesen Webserver für Tests zu benutzen, erstellen Sie eine andere SQL Anywhere-Datenbank, starten sie und stellen eine Verbindung zu ihr her. In den folgenden Schritten wird gezeigt, wie Sie dabei vorgehen.

♦  So senden Sie eine HTTP-Anforderung
  1. Erstellen Sie mit dem Dienstprogramm zur Datenbankerstellung eine weitere Datenbank zur Verwendung mit einem Webdienstclient.

    dbinit echo_client
  2. Fahren Sie mit Interactive SQL fort und starten Sie diese Datenbank mit der folgenden Anweisung.

    START DATABASE 'echo_client.db' 
    AS echo_client;
  3. Stellen Sie nun mit der folgenden Anweisung eine Verbindung zu der Datenbank her, die auf dem Server namens "echo" gestartet wurde.

    CONNECT TO 'echo'
    DATABASE 'echo_client' 
    USER 'DBA' 
    IDENTIFIED BY 'sql';
  4. Erstellen Sie eine gespeicherte Prozedur, die mit dem EchoService-Webdienst kommunizieren soll.

    CREATE PROCEDURE setMIME( 
      value LONG VARCHAR, 
      mimeType LONG VARCHAR, 
      urlSpec LONG VARCHAR
      )
    URL '!urlSpec'
    HEADER 'ASA-Id'
    TYPE 'HTTP:POST:!mimeType';

    Die URL-Klausel wird verwendet, um den Webdienst zu referenzieren. Zu Illustrationszwecken wird die URL als Parameter an die setMIME-Prozedur übergeben.

    Die TYPE-Klausel zeigt an, dass der MIME-Typ als Parameter an die setMIME-Prozedur übergeben wird. Das Standardformat für eine Webdienstanforderung ist SOAP:RPC. Das gewählte Format für diese Webdienstanforderung ist HTTP:POST.

  5. Rufen Sie die gespeicherte Prozedur auf, um die Anforderung zu senden und die Antwort zu erhalten. Der übergebene Wertparameter hat die URL-kodierte Form <hello>this is xml</hello>. Der Medientyp ist application/x-www-form-urlencoded, da form-urlencoded vom SQL Anywhere-Webserver verstanden wird. Die URL für den Webdienst ist als letzter Parameter im Aufruf enthalten.

    CALL setMIME('valueAsXML=%3Chello%3Ethis%20is%20xml%3C/hello%3E', 
        'application/x-www-form-urlencoded', 
        'http://localhost:8082/EchoService');

    Der letzte Parameter gibt die URL des Webdienstes an, der Port 8082 abhört.

Der folgende Code zeigt das HTTP-Paket, das an den Webserver gesendet wird.

POST /EchoService HTTP/1.0
Date: Sun, 28 Jan 2007 04:04:44 GMT
Host: localhost
Accept-Charset: windows-1252, UTF-8, *
User-Agent: SQLAnywhere/11.0.0.1297
Content-Type: application/x-www-form-urlencoded; charset=windows-1252
Content-Length: 49
ASA-Id: 1055532613:echo_client:echo:968000
Connection: close

valueAsXML=%3Chello%3Ethis%20is%20xml%3C/hello%3E

Der folgende Code zeigt die Antwort vom Webserver.

HTTP/1.1 200 OK
Server: SQLAnywhere/11.0.0.1297
Date: Sun, 28 Jan 2007 04:04:44 GMT
Expires: Sun, 28 Jan 2007 04:04:44 GMT
Content-Type: text/plain; charset=windows-1252
Connection: close

<hello>this is xml</hello>

Im Folgenden ist die Ergebnismenge zu sehen, die von Interactive SQL angezeigt wird.

Attribut Wert
Status HTTP/1.1 200 OK
Body <hello>this is xml</hello>
Server SQLAnywhere/11.0.0.1297
Date Son, 16 Dez 2007 04:04:44 WEZ
Expires Son, 16 Dez 2007 04:04:44 WEZ
Content-Type text/plain; charset=windows-1252
Connection close