このレッスンでは、SOAP 要求を送信し SOAP 応答を受信する Web クライアントを設定します。このレッスンは、前のレッスンで説明したように Web サーバーが設定されていることを前提としています。このレッスンで説明している、クライアントからの SOAP 要求を処理するデータベースサーバーの設定の詳細については、レッスン 1:SOAP 要求を受信し SOAP 応答を送信する Web サーバーの設定を参照してください。
このレッスンには、localhost への複数の参照が含まれています。Web クライアントを Web サーバーと同じコンピューターで実行していない場合は、localhost の代わりにレッスン 1 の Web サーバーの IP アドレスを使用します。
次のコマンドを実行して、SQL Anywhere データベースを作成します。
dbinit ftc_client |
次のコマンドを使用してパーソナルデータベースクライアントを起動します。
dbsrv12 ftc_client.db |
次のコマンドを使用して Interactive SQL でデータベースに接続します。
dbisql -c "UID=DBA;PWD=sql;SERVER=ftc_client" |
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 クライアントプロシージャー (inoutheader、inheader) の代入変数は英数字である必要があります。Web サービスクライアントが関数として宣言された場合、すべてのパラメーターは IN モードのみになります (呼び出された側の関数では代入できません)。したがって、SOAP 応答ヘッダー情報を抽出するには、OPENXML またはその他の文字列関数を使用する必要があります。
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> |
OPEN 文によって FtoC プロシージャーが呼び出されます。このプロシージャーで、SOAP 要求が Web サーバーに送信された後、Web サーバーからの応答が処理されます。応答に含まれているヘッダーは inoutheader に返されます。
次の項では、SOAP 要求を Web サーバーに送信して SOAP 応答を調べます。
![]() |
DocCommentXchange で意見交換できます
|
Copyright © 2012, iAnywhere Solutions, Inc. - SQL Anywhere 12.0.1 |