Web サービス・クライアント呼び出しは、ストアド関数またはストアド・プロシージャのどちらでも実行できます。関数を使用した場合、戻り値のタイプは CHAR、VARCHAR、LONG VARCHAR などの文字データ型です。返される値は、HTTP 応答の本文です。ヘッダ情報は含まれません。HTTP ステータス情報を含む要求に関する追加情報は、プロシージャによって返されます。したがって、この追加情報にアクセスする場合は、プロシージャの使用をおすすめします。
SOAP 関数からは SOAP 応答を含んだ XML ドキュメントが返されます。
SOAP 応答は構造化された XML ドキュメントであるため、デフォルトでは SQL Anywhere はこの情報を利用してさらに役立つ結果セットを作成しようとします。返された応答ドキュメント内の最上位レベルの各タグが抽出され、カラム名として使用されます。これらのタグのそれぞれの下にあるサブツリーの内容は、そのカラムのローの値として使用されます。
たとえば、次の SOAP 応答が返される場合、SQL Anywhere は以下のデータ・セットを作成します。
<SOAP-ENV:Envelope xmlns:SOAPSDK1="http://www.w3.org/2001/XMLSchema" xmlns:SOAPSDK2="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAPSDK3="http://schemas.xmlsoap.org/soap/encoding/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"> <SOAP-ENV:Body> <ElizaResponse xmlns:SOAPSDK4="SoapInterop"> <Eliza>Hi, I'm Eliza. Nice to meet you.</Eliza> <ElizaResponse> </SOAP-ENV:Body> </SOAP-ENV:Envelope> |
Eliza |
---|
Hi, I'm Eliza.Nice to meet you. |
この例では、応答ドキュメントは SOAP-ENV:Body タグ内にある ElizaResponse タグによって区切られています。
結果セットには、最上位レベルのタグの数だけのカラムが含まれます。SOAP 応答には最上位レベルのタグが 1 つしかないため、この結果セットのカラムは 1 つだけです。この最上位レベル・タグである Eliza が、カラム名となります。
SOAP 応答を含む XML 結果セット内の情報には、組み込みの Open XML 処理機能を使用してもアクセスできます。
次の例では、OPENXML プロシージャを使用して SOAP 応答の一部を抽出します。この例は、SYSWEBSERVICE テーブルの内容を公開するために SOAP サービスとして Web サービスを使用しています。
CREATE SERVICE get_webservices TYPE 'SOAP' AUTHORIZATION OFF USER DBA AS SELECT * FROM SYSWEBSERVICE; |
2 番目の SQL Anywhere データベースで作成する次のストアド関数は、この Web サービスへの呼び出しを発行します。この関数の戻り値は、SOAP 応答ドキュメント全体です。DNET がデフォルトの SOAP サービス・フォーマットであるため、応答は .NET DataSet フォーマットになります。
CREATE FUNCTION get_webservices() RETURNS LONG VARCHAR URL 'HTTP://localhost/get_webservices' TYPE 'SOAP:DOC'; |
次の文は、OPENXML プロシージャを使用して結果セットの 2 つのカラムを抽出する方法を示しています。service_name カラムおよび secure_required カラムは、セキュアな SOAP サービスと、HTTPS を必要としているかどうかをそれぞれ示します。
SELECT * FROM openxml( get_webservices(), '//row' ) WITH ("Name" char(128) 'service_name', "Secure?" char(1) 'secure_required' ); |
この文は、ロー・ノードの子孫を選択することによって機能します。WITH 句は、目的の 2 つの要素に基づき、結果セットを作成します。get_webservices サービスのみが存在すると想定し、この関数は以下の結果セットを返します。
Name | Secure? |
---|---|
get_webservices | N |
SQL Anywhere で使用できる XML 処理機能の詳細については、データベースにおける XML の使用を参照してください。
その他のタイプのプロシージャは、応答に関する全情報を 2 つのカラムから成る結果セットで返します。この結果セットには、応答ステータス、ヘッダ情報、および本文が含まれます。最初のカラムには Attribute、2 番目のカラムには Value という名前が付けられています。どちらも LONG VARCHAR データ型です。
結果セットには、応答ヘッダ・フィールドごとに 1 ロー、HTTP ステータス行 (Status 属性) に対して 1 ロー、応答本文 (Body 属性) に対して 1 ローが含まれます。
次の例は、一般的な応答を示します。
Attribute | Value |
---|---|
Status | HTTP /1.0 200 OK |
Body | <!DOCTYPE HTML ... ><HTML> ... </HTML> |
Content-Type | text/html |
Server | GWS/2.1 |
Content-Length | 2234 |
Date | Mon, 18 Oct 2004, 16:00:00 GMT |
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |