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

SQL Anywhere 12.0.1 » SQL Anywhere サーバー プログラミング » HTTP Web サービス » HTTP Web サービスの例 » チュートリアル:SQL Anywhere を使用した SOAP/DISH サービスへのアクセス

 

レッスン 2:SOAP 要求を送信し SOAP 応答を受信する Web クライアントの設定

このレッスンでは、SOAP 要求を送信し SOAP 応答を受信する Web クライアントを設定します。このレッスンは、前のレッスンで説明したように Web サーバーが設定されていることを前提としています。このレッスンで説明している、クライアントからの SOAP 要求を処理するデータベースサーバーの設定の詳細については、レッスン 1:SOAP 要求を受信し SOAP 応答を送信する Web サーバーの設定を参照してください。

注意

このレッスンには、localhost への複数の参照が含まれています。Web クライアントを Web サーバーと同じコンピューターで実行していない場合は、localhost の代わりにレッスン 1 の Web サーバーの IP アドレスを使用します。

 ♦ SOAP 要求を送信し SOAP 応答を受信するクライアントの設定
  1. 次のコマンドを実行して、SQL Anywhere データベースを作成します。

    dbinit ftc_client
  2. 次のコマンドを使用してパーソナルデータベースクライアントを起動します。

    dbsrv12 ftc_client.db
  3. 次のコマンドを使用して Interactive SQL でデータベースに接続します。

    dbisql -c "UID=DBA;PWD=sql;SERVER=ftc_client"
  4. SOAP 要求を DISH サービスに送信する新しいストアドプロシージャーを作成します。

    Interactive SQL で次の SQL 文を実行します。

    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';

    URL 句の http://localhost:8082/soap_endpoint 文字列は、localhost で実行されポート 8082 で受信する Web サーバーを示します。対象となる DISH Web サービスの名前は soap_endpoint であり、SOAP 終了ポイントとして動作します。

    SET 句は、呼び出す SOAP 処理の名前、またはサービス FtoCService を指定します。

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

    SQL Anywhere クライアントプロシージャー (inoutheaderinheader) の代入変数は英数字である必要があります。Web サービスクライアントが関数として宣言された場合、すべてのパラメーターは IN モードのみになります (呼び出された側の関数では代入できません)。したがって、SOAP 応答ヘッダー情報を抽出するには、OPENXML またはその他の文字列関数を使用する必要があります。

  5. 2 つの特殊な SOAP 要求ヘッダーエントリを構築するラッパープロシージャーを作成し、それらを FtoC プロシージャーに渡して、サーバー応答を処理します。

    Interactive SQL で次の SQL 文を実行します。



    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;

    最初の SET 文は、Web サーバーにユーザークレデンシャルを通知する、SOAP ヘッダーエントリの XML 表現を作成します。

    <Authentication xmlns="SecretAgent" mustUnderstand="1">
      <userName alias="99">
        <first>Susan</first>
        <last>Hilton</last>
      </userName>
    </Authentication>

    2 番目の SET 文は、クライアントセッション ID を追跡する、SOAP ヘッダーエントリの XML 表現を作成します。

    <Session xmlns="SomeSession">123456789</Session>
  6. OPEN 文によって FtoC プロシージャーが呼び出されます。このプロシージャーで、SOAP 要求が Web サーバーに送信された後、Web サーバーからの応答が処理されます。応答に含まれているヘッダーは inoutheader に返されます。

次の項では、SOAP 要求を Web サーバーに送信して SOAP 応答を調べます。

 参照