このレッスンでは、SOAP 要求を送信し SOAP 応答を受信する Web クライアントを設定します。
前提条件
このレッスンは、前のレッスンで説明したように Web サーバが設定されていることを前提としています。レッスン 1:SOAP 要求を受信し SOAP 応答を送信する Web サーバの設定を参照してください。
このレッスンでは、このチュートリアルの開始時に、権限のセクションで一覧されているロールと権限を持っていることを前提としています。 チュートリアル:SQL Anywhere を使用した SOAP/DISH サービスへのアクセス
内容と備考
このレッスンには、localhost への複数の参照が含まれています。Web クライアントを Web サーバと同じコンピュータで実行していない場合は、localhost の代わりにレッスン 1 の Web サーバのホスト名または IP アドレスを使用します。
次のコマンドを実行して、SQL Anywhere データベースを作成します。
dbinit -dba DBA,sql ftc_client |
次のコマンドを使用してデータベースクライアントを起動します。
dbsrv16 ftc_client.db |
次のコマンドを使用して Interactive SQL でデータベースに接続します。
dbisql -c "UID=DBA;PWD=sql;SERVER=ftc_client" |
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 サービスクライアントプロシージャの代入変数 (inoutheader、inheader) は英数字である必要があります。Web サービスクライアントが関数として宣言された場合、すべてのパラメータは IN モードのみになります (呼び出された側の関数では代入できません)。したがって、SOAP 応答ヘッダ情報を抽出するには、OPENXML またはその他の文字列関数を使用する必要があります。
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> |
OPEN 文によって FtoC プロシージャが呼び出されます。このプロシージャで、SOAP 要求が Web サーバに送信された後、Web サーバからの応答が処理されます。応答に含まれているヘッダは inoutheader に返されます。
![]() |
DocCommentXchange で意見交換できます
|
Copyright © 2013, SAP AG or an SAP affiliate company. - SAP Sybase SQL Anywhere 16.0 |