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

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

 

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

このレッスンでは、SOAP 要求を送信し SOAP 応答を受信する Web クライアントを設定します。

前提条件

このレッスンは、前のレッスンで説明したように Web サーバが設定されていることを前提としています。レッスン 1:SOAP 要求を受信し SOAP 応答を送信する Web サーバの設定を参照してください。

このレッスンでは、このチュートリアルの開始時に、権限のセクションで一覧されているロールと権限を持っていることを前提としています。 チュートリアル:SQL Anywhere を使用した SOAP/DISH サービスへのアクセス

内容と備考

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

 ♦ タスク
  1. 次のコマンドを実行して、SQL Anywhere データベースを作成します。

    dbinit -dba DBA,sql ftc_client
  2. 次のコマンドを使用してデータベースクライアントを起動します。

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

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

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

    CREATE OR REPLACE PROCEDURE FtoC( fahrenheit 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' です。

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

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

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



    CREATE OR REPLACE PROCEDURE FahrenheitToCelsius( Fahrenheit 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( Fahrenheit, 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 Fahrenheit, 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 応答を Web サーバから受信できるクライアントが作成されました。

次の手順

次のレッスンでは、SOAP 要求を Web サーバに送信して SOAP 応答を調べます。レッスン 3:SOAP 要求の送信と SOAP 応答の受信に進みます。

 参照