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 サービスへのアクセス

 

レッスン 3:SOAP 要求の送信と SOAP 応答の受信

このレッスンでは、前のレッスンで作成したラッパープロシージャを呼び出します。このプロシージャは、レッスン 1 で作成した Web サーバに SOAP 要求を送信します。

前提条件

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

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

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

 ♦ タスク
  1. レッスン 2 の接続が開かれていない場合は、Interactive SQL でクライアントデータベースに接続します。

    dbisql -c "UID=DBA;PWD=sql;SERVER=ftc_client"
  2. SOAP 要求と SOAP 応答のロギングを有効にします。

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

    CALL sa_server_option('WebClientLogFile', 'soap.txt');
    CALL sa_server_option('WebClientLogging', 'ON');

    これらの呼び出しによって、SOAP 要求と SOAP 応答の内容を調べることができるようになります。要求と応答のログは soap.txt というファイルに記録されます。

  3. ラッパープロシージャを呼び出して、SOAP 要求を送信し、SOAP 応答を受信します。

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

    CALL FahrenheitToCelsius(212);

    この呼び出しでは、華氏の値 212 が FahrenheitToCelsius プロシージャに渡されます。このプロシージャは、カスタマイズされた 2 つの SOAP ヘッダとともに値を FToC プロシージャに渡します。クライアント側のどちらのプロシージャも、前のレッスンで作成されています。

結果

FToC Web サービスプロシージャは、華氏の値と SOAP ヘッダを Web サーバに送信します。SOAP 要求には次の情報が含まれています。



<SOAP-ENV:Envelope
  xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
  xmlns:xsd="http://www.w3.org/2001/XMLSchema"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xmlns:m="http://localhost:8082">
  <SOAP-ENV:Header>
    <Authentication xmlns="SecretAgent" mustUnderstand="1">
      <userName alias="99">
        <first>Susan</first>
        <last>Hilton</last>
      </userName>
    </Authentication>
    <Session xmlns="SomeSession">123456789</Session>
  </SOAP-ENV:Header>
  <SOAP-ENV:Body>
    <m:FtoCService>
      <m:fahrenheit>212</m:fahrenheit>
    </m:FtoCService>
  </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

次に、FtoC プロシージャは Web サーバから応答を受信します。応答には、華氏の値に基づく結果セットが含まれています。SOAP 応答には次の情報が含まれています。



<SOAP-ENV:Envelope 
  xmlns:xsd='http://www.w3.org/2001/XMLSchema' 
  xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' 
  xmlns:SOAP-ENV='http://schemas.xmlsoap.org/soap/envelope/' 
  xmlns:tns='http://localhost:8082'>
  <SOAP-ENV:Header>
    <Authentication xmlns="SecretAgent" alias="99" mustUnderstand="1">
      <first>Susan</first>
      <last>Hilton</last>
    </Authentication>
  </SOAP-ENV:Header> 
  <SOAP-ENV:Body>
    <tns:FtoCServiceResponse>
      <tns:FtoCServiceResult xsi:type='xsd:string'>
        &lt;tns:rowset xmlns:tns=&quot;http://localhost:8082/ftc&quot;&gt;&#x0A; 
        &lt;tns:row&gt;&#x0A;  
        &lt;tns:answer&gt;100
        &lt;/tns:answer&gt;&#x0A; 
        &lt;/tns:row&gt;&#x0A;
        &lt;/tns:rowset&gt;&#x0A;   
      </tns:FtoCServiceResult>
      <tns:sqlcode>0</tns:sqlcode>
    </tns:FtoCServiceResponse>
  </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

<SOAP-ENV:Header> の内容は inoutheader に返されます。

SOAP 応答を調べてみると、結果セットが FToCService Web サービスによって応答の中でエンコードされていることがわかります。結果セットはデコードされて FahrenheitToCelsius プロシージャに返されます。華氏の値 212 が Web サーバに渡された場合の結果セットは次のようになります。

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

FahrenheitToCelsius プロシージャの SELECT 文では、OPENXML 関数を使用して SOAP 応答が解析され、tns:answer 構造体で定義された摂氏の値が抽出されます。

次の結果セットが Interactive SQL に生成されます。

Fahrenheit   Celsius
        212       100

次に、華氏の温度を摂氏の値に変換する SOAP Web サービスに対する別のサンプル呼び出しを示します。

CALL FahrenheitToCelsius(32);

次の結果セットが Interactive SQL に生成されます。

Fahrenheit   Celsius
         32         0

 参照