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

 

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

このレッスンでは、前のレッスンで作成したラッパープロシージャーを呼び出します。このプロシージャーは、レッスン 1 で作成した Web サーバーに SOAP 要求を送信します。このレッスンで説明している、SOAP 要求を送信する Web クライアントの設定の詳細については、レッスン 2:SOAP 要求を送信し SOAP 応答を受信する Web クライアントの設定を参照してください。

 ♦ SOAP 要求の送信
  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:temperature>212</m:temperature>
    </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;20
        &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 に生成されます。

temperature Celsius
212 100
 参照