SOAP および DISH Web サービスは、標準の SOAP クライアント (Microsoft .NET や JAX-WS で記述された SOAP クライアントなど) がアクセスできる標準の SOAP Web サービスを作成するための手段です。
SOAP サービスは、標準の SOAP 要求を受け入れ、処理する Web サービスを SQL Anywhere で構築するためのメカニズムです。
SOAP サービスを宣言するには、そのサービスが SOAP のタイプであることを指定します。標準の SOAP 要求の本文は、SOAP エンベロープで、特定のフォーマットの XML ドキュメントを意味します。SQL Anywhere は、指定したプロシージャを使用してこれらの要求を解析し、処理します。応答は、SOAP エンベロープでもある標準の SOAP 応答の形式で自動的にフォーマットされ、クライアントに返されます。
SOAP サービスの作成に使用する文の構文は、次のとおりです。
CREATE SERVICE service-name TYPE 'SOAP' [ FORMAT { 'DNET' | 'CONCRETE' | 'XML' | NULL } ] [ common-attributes ] AS statement
DISH サービスは、SOAP サービスのグループのプロキシとして機能するほか、現在公開している SOAP サービスを記述する WSDL (Web Services Description Language) ドキュメントをクライアント向けに自動構築します。
DISH サービスを作成する場合、GROUP 句で指定された名前によって、その DISH サービスが公開する SOAP サービスが決定されます。DISH サービスの名前がプレフィクスとなっている名前を持つ SOAP サービスがすべて公開されます。たとえば、GROUP xyz を指定すると、SOAP サービス xyz/aaaa、xyz/bbbb、または xyz/cccc が公開されます。abc/aaaa や xyzaaaa という名前の SOAP サービスは公開されません。SOAP サービスは、複数の DISH サービスによって公開される場合があります。グループ名が指定されていない場合、DISH サービスはデータベース内のすべての SOAP サービスを公開します。SOAP サービス名で使用できる文字と同じ文字を DISH グループ名に使用できます。
DISH サービスの作成に使用する文の構文は、次のとおりです。
CREATE SERVICE service-name TYPE 'DISH' [ GROUP { group-name | NULL } ] [ FORMAT { 'DNET' | 'CONCRETE' | 'XML' | NULL } ] [ common-attributes ]
CREATE SERVICE 文の FORMAT 句により、.NET や JAX-WS など、さまざまな種類の SOAP クライアントに合わせて SOAP サービス・データ・ペイロードがカスタマイズされます。FORMAT 句は、DISH サービスによって返される WSDL ドキュメントの内容と、SOAP 応答によって返されるデータ・ペイロードのフォーマットに影響します。
デフォルト・フォーマットの DNET は、.NET DataSet フォーマットを必要とする .NET SOAP クライアント・アプリケーションで使用するネイティブ・フォーマットです。
CONCRETE フォーマットは、返されたデータ構造のフォーマットに基づいてインタフェースを自動的に生成する JAX-WS や .NET などのクライアントで使用します。このフォーマットを指定すると、SQL Anywhere によって返された WSDL ドキュメントは、結果セットを具体的に説明する SimpleDataset 要素を公開します。この要素は、ローの配列から構成されるローセットの包含階層で、それぞれにカラム要素の配列が含まれます。
XML フォーマットは、SOAP 応答を 1 つの大きな文字列として受け入れ、XML パーサによって必要な要素と値を検索して抽出する SOAP クライアントで使用します。通常このフォーマットは、さまざまな種類の SOAP クライアント間で最も手軽です。
SOAP サービスのフォーマットが指定されていない場合、フォーマットはサービスの DISH サービス宣言から継承されます。DISH サービスでもフォーマットが宣言されていない場合、デフォルトは、.NET クライアントと互換性のある DNET です。フォーマットを宣言しない SOAP サービスは、複数の DISH サービスを定義することにより、それぞれ異なる FORMAT タイプを持つさまざまな種類の SOAP クライアントで使用できます。
SOAP サービスでは、フォーマット・タイプを指定する必要はなく、フォーマット・タイプに NULL を設定できます。この場合は、SOAP サービスのプロキシとして機能する DISH サービスからフォーマットが継承されます。各 SOAP サービスに対して複数の DISH サービスがプロキシの役割をすることができ、それらの DISH サービスは同じ種類でなくてもかまいません。このことは、.NET や JAX-WS など、さまざまな種類の SOAP クライアントで単一の SOAP サービスを使用できることを意味します。DISH サービスは、同じ SOAP サービスに対して、フォーマットは異なっても同じデータ・ペイロードを公開するので、「同種」であると見なされます。
たとえば、以下の 2 つの SOAP サービスを考えてみます。どちらもフォーマットを指定していません。
CREATE SERVICE "abc/hello" TYPE 'SOAP' AS CALL hello(:student); |
CREATE SERVICE "abc/goodbye" TYPE 'SOAP' AS CALL goodbye(:student); |
いずれのサービスにも FORMAT 句が含まれていないため、フォーマットはデフォルトでは NULL となり、プロキシとして機能している DISH サービスからフォーマットが継承されます。ここで、次のような 2 つの DISH サービスを考えてみます。
CREATE SERVICE "abc_xml" TYPE 'DISH' GROUP "abc" FORMAT 'XML'; |
CREATE SERVICE "abc_concrete" TYPE 'DISH' GROUP "abc" FORMAT 'CONCRETE'; |
どちらの DISH サービスも同じグループ名 abc を指定しているため、両方が同じ SOAP サービス (主にプレフィクス "abc/" が付いている名前を持つ SOAP サービスすべて) のプロキシとして機能します。
ただし、abc_xml DISH サービスを介して 2 つの SOAP サービスのいずれかがアクセスされた場合、SOAP サービスは XML フォーマットを継承し、abc_concrete SOAP サービスを介してアクセスした場合は、CONCRETE フォーマットを継承します。
同種の DISH サービスは、作成した SOAP Web サービスにさまざまなタイプの SOAP クライアントがアクセスできるようにしたい場合、重複するサービスを避ける手段を提供しています。
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |