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

SQL Anywhere 11.0.1 (日本語) » SQL Anywhere サーバ - プログラミング » SQL Anywhere データ・アクセス API » SQL Anywhere Web サービス

 

SOAP サービスの使用

Web サービスの数多くの機能を説明するため、まず華氏を摂氏に変換する単純なサンプル・サービスから見ていきます。

♦  単純な Web サービス・サーバを設定するには、次の手順に従います。
  1. データベースを作成します。

    dbinit ftc
  2. このデータベースを使用してサーバを起動します。

    dbsrv11 -xs http(port=8082) -n ftc ftc.db
  3. Interactive SQL を使用してサーバに接続します。

    dbisql -c "UID=DBA;PWD=sql;ENG=ftc"
  4. Interactive SQL を使用して Web サービスを作成します。

    CREATE SERVICE FtoCService
    TYPE 'SOAP'
    FORMAT 'XML'
    AUTHORIZATION OFF
    USER DBA
    AS CALL FToCConvertor( :temperature );
  5. このサービスが呼び出す、華氏表現の温度を摂氏に変換するために必要な計算を実行するストアド・プロシージャを定義します。

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

この時点で、SQL Anywhere Web サービス・サーバは実行されており、要求処理の準備ができています。サーバは SOAP 要求をポート 8082 で受信しています。

この SOAP 要求サーバをテストするための最も簡単な方法は、別の SQL Anywhere データベース・サーバで SOAP 要求を送信して応答を取得することです。

♦  SOAP 要求を送受信するには、次の手順に従います。
  1. 第 2 のサーバで使用するデータベースを新たに作成します。

    dbinit ftc_client
  2. このデータベースを使用してパーソナル・サーバを起動します。

    dbeng11 ftc_client.db
  3. Interactive SQL の別のインスタンスを使用してパーソナル・サーバに接続します。

    dbisql -c "UID=DBA;PWD=sql;ENG=ftc_client"
  4. Interactive SQL を使用してストアド・プロシージャを作成します。

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

    URL 句は、SOAP Web サービスを参照するために使用されます。文字列 'http://localhost:8082/FtoCService' は、使用される Web サービスの URI を指定します。これは、ポート 8082 で受信する Web サーバを指しています。

    Web サービス要求作成時のデフォルト・フォーマットは 'SOAP:RPC' です。この例で使用されているフォーマットは 'SOAP:DOC' です。これは 'SOAP:RPC' と似ていますが、より多くのデータ型を使用できます。SOAP 要求は必ず XML ドキュメントとして送信されます。SOAP 要求の送信メカニズムは 'HTTP:POST' です。

  5. FtoC ストアド・プロシージャのラッパが必要なので、2 つ目のストアド・プロシージャを作成します。

    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;

    このストアド・プロシージャは、Web サービスの呼び出しを隠すプロシージャとして機能します。FtoC ストアド・プロシージャは、このストアド・プロシージャによって処理される結果セットを返します。結果セットは、次のような単一の XML 文字列です。

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

    OPENXML 関数を使用して、返された XML を解析し、摂氏単位の温度を示す値を抽出します。

  6. ストアド・プロシージャを呼び出して、要求を送信し、応答を取得します。

    CALL FahrenheitToCelsius(212);

    華氏温度 (temperature) とその摂氏 (Celsius) 換算値が表示されます。

    temperature Celsius
    212 100

ここまでで、SQL Anywhere Web サーバで実行されている単純な Web サービスのデモを行いました。上記のように、別の SQL Anywhere サーバがこの Web サーバと通信できます。サーバ間でやりとりされる SOAP 要求と応答の内容に対しては、ほとんど制御できません。次の項では、独自の SOAP ヘッダを追加することでこの単純な Web サービスを拡張する方法について見ていきます。

注意

Web サービスは、同じデータベース・サーバによって提供されていてもかまいませんが、クライアント関数と同じデータベースにあるものは使用できません。同じデータベース内の Web サービスにアクセスしようとすると、「403 Forbidden」のエラーが返されます。

SOAP ヘッダ処理の詳細については、SOAP ヘッダの使用を参照してください。