SQL Anywhere Web サービス・クライアントのプロシージャや関数の定義における TYPE 句では、MIME タイプを指定できます。MIME タイプ指定の値は、Content-Type 要求ヘッダや操作モードの設定に使用することで、1 つの呼び出しパラメータのみで要求の本文を設定することができます。パラメータの置換後に Web サービスのストアド・プロシージャ (または関数) を呼び出す場合は、パラメータがまったくなくなるか、1 つだけ残される場合があります。Web サービスのプロシージャを (置換後に) NULL パラメータまたはパラメータなしで呼び出すと、本文がなくコンテンツ長が 0 の要求になります。MIME タイプを指定しない場合、動作は変更されません。パラメータの名前と値 (複数のパラメータが可能) は、HTTP 要求の本文内で URL コード化されます。
一般的な MIME タイプの例を次に示します。
MIME タイプを設定する手順を次に示します。前半は、MIME タイプの設定をテストするために使用できる Web サービスを設定します。後半は、MIME タイプを設定する方法を示します。
データベースを作成します。
dbinit echo |
このデータベースを使用してサーバを起動します。
dbsrv11 -xs http(port=8082) -n echo echo.db |
Interactive SQL を使用してサーバに接続します。
dbisql -c "UID=DBA;PWD=sql;ENG=echo" |
Interactive SQL を使用して Web サービスを作成します。
CREATE SERVICE EchoService TYPE 'RAW' USER DBA AUTHORIZATION OFF SECURE OFF AS CALL Echo(:valueAsXML); |
このサービスで呼び出すストアド・プロシージャを定義します。
CREATE PROCEDURE Echo( parm LONG VARCHAR ) BEGIN SELECT parm; END; |
この時点で、SQL Anywhere Web サービス・サーバは実行されており、要求処理の準備ができています。サーバは HTTP 要求をポート 8082 で受信しています。
この Web サーバをテストに使用するには、別の SQL Anywhere データベースを作成し、起動して、接続します。次の手順は、これを行う方法を示します。
データベース作成ユーティリティを使用して、Web サービス・クライアントで使用する別のデータベースを作成します。
dbinit echo_client |
Interactive SQL で、次の文を使用してこのデータベースを起動します。
START DATABASE 'echo_client.db' AS echo_client; |
次の文を使用して、サーバ・エコーで起動したデータベースに接続します。
CONNECT TO 'echo' DATABASE 'echo_client' USER 'DBA' IDENTIFIED BY 'sql'; |
EchoService Web サービスと通信するストアド・プロシージャを作成します。
CREATE PROCEDURE setMIME( value LONG VARCHAR, mimeType LONG VARCHAR, urlSpec LONG VARCHAR ) URL '!urlSpec' HEADER 'ASA-Id' TYPE 'HTTP:POST:!mimeType'; |
URL 句は、Web サービスを参照するために使用されます。説明するために、URL は パラメータとして setMIME プロシージャに渡されます。
TYPE 句は、MIME タイプがパラメータとして setMIME プロシージャに渡されることを示しています。Web サービス要求作成時のデフォルト・フォーマットは 'SOAP:RPC' です。この Web サービス要求を行うために選択したフォーマットは 'HTTP:POST' です。
ストアド・プロシージャを呼び出して、要求を送信し、応答を取得します。渡される value パラメータは、<hello>this is xml</hello>
が URL コード化された形式になります。form-urlencoded は、SQL Anywhere Web サーバによって認識されるため、メディア・タイプは application/x-www-form-urlencoded
にします。Web サービスの URL は、呼び出しの最後のパラメータとして含まれます。
CALL setMIME('valueAsXML=%3Chello%3Ethis%20is%20xml%3C/hello%3E', 'application/x-www-form-urlencoded', 'http://localhost:8082/EchoService'); |
最後のパラメータでは、ポート 8082 で受信している Web サービスの URI を指定します。
Web サーバに送信される HTTP パケットの例は次のようになります。
POST /EchoService HTTP/1.0 Date: Sun, 28 Jan 2007 04:04:44 GMT Host: localhost Accept-Charset: windows-1252, UTF-8, * User-Agent: SQLAnywhere/11.0.0.1297 Content-Type: application/x-www-form-urlencoded; charset=windows-1252 Content-Length: 49 ASA-Id: 1055532613:echo_client:echo:968000 Connection: close valueAsXML=%3Chello%3Ethis%20is%20xml%3C/hello%3E |
Web サーバからの応答は次のようになります。
HTTP/1.1 200 OK Server: SQLAnywhere/11.0.0.1297 Date: Sun, 28 Jan 2007 04:04:44 GMT Expires: Sun, 28 Jan 2007 04:04:44 GMT Content-Type: text/plain; charset=windows-1252 Connection: close <hello>this is xml</hello> |
Interactive SQL で表示される結果セットは次のようになります。
Attribute | Value |
---|---|
Status | HTTP /1.1 200 OK |
Body | <hello>this is xml</hello> |
Server | SQLAnywhere/11.0.0.1297 |
Date | Sun, 16 Dec 2007 04:04:44 GMT |
Expires | Sun, 16 Dec 2007 04:04:44 GMT |
Content-Type | text/plain; charset=windows-1252 |
Connection | close |
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |