4Dを使用して、Web サービスへサブスクライブすることができます。言い換えれば、自分のデータベース内から外部の Web サービスを呼び出すことができます。
インターネット上で利用可能な Web サービスを使用すると、株価情報へのアクセスや貨物配送の追跡、複雑な計算の実行など、数々の追加機能を容易にデータベースへ組み込むことができます。インターネット上で利用できる多数の Web サービスが、ほとんどすべての要求を満たしてくれます。
また、別のデータベースで自分が公開した Web サービスへサブスクライブすることも可能です。このような方法により、さまざまな4Dデータベースが各々の間で通信できるようになります。
あらゆる4Dデータベースは、インターネットに接続するだけで Web サービスへサブスクライブすることができます。
通常、Web サービスを呼び出すには、次に説明する手順を踏まなければなりません:
- サブスクライブしようとする Web サービスの URL を取得します。
URL を取得するには、インターネット上に公開された Web サービスの一覧が登録されている Web サイトや (例えば、www.xmethods.net)、UDDI のようなディレクトリを利用することができます。大抵の場合、その Web サービス用の WSDL ファイルのURL を取得しなければなりません。
注: 4Dは、RPC モードや DOC モードで公開された Web サービスを使用することができます (RPC、DOC、複合型の互換性参照)。 - Web サービスウィザードを使用して、利用する Web サービスの WSDL の内容を解析し、対応するプロキシメソッドを生成します。プロキシメソッドはローカルなプロジェクトメソッドで、Web サービスへの問い合せや戻り値の取得を行います。この手順については、後述の Web サービスウィザードを使用するの節を参照してください。
注:
- WSDL ファイルを使用しなくても、Web サービスウィザードでプロキシメソッドを作成することができます (使用するパラメーターを手動で入力するだけです)。
- また、Web サービスウィザードを使用しなくても、メソッドエディターでプロキシメソッドを作成することもできます (上級ユーザ向け)。
- データベースのコード内で適切な引数を渡して、必要になるたびにプロキシメソッドをコールします。
この手順については、後述のプロキシメソッドを呼び出すで説明します。
プロキシメソッドは、Web サービスへの接続を行います:

4Dアプリケーションからの Web サービスへのサブスクライブは、Web サービスウィザードがすべて処理します。このウィザードは次の処理を自動的に実行します:
- 利用する Web サービスの WSDL ファイルを解析。
- 作成するプロキシメソッドのパラメーターを定義。
- プロキシメソッドを作成。
Web サービスウィザードのウインドウを開くには、4Dのデザインメニューから Web サービスウィザード...を選択します。ウィザードウインドウが表示されます:

注: エクスプローラのメソッドページにあるオプションメニューから Web サービスウィザードを表示することもできます (Webサービスウィザードでメソッドを作成する参照)。
このウインドウには3つのエリアがあります:
- "URL:"エリアを使用すると、選択した Web サービス用の WSDL ファイルの URL を入力、または選択することができます。このエリアはコンボボックスになっており、以前に入力された値がドロップダウンリスト形式で保存されています。
- 中央のエリアには、サービス名や公開メソッドなど、WSDL ファイルの内容を解析した結果が表示されます。
- 下側のエリア (“詳細設定”パラメーター、デフォルトでは非表示) には、中央のエリアで選択したメソッドの引数が表示されます。
検索ボタンにより、指定した WSDL ファイルの解析が開始され、その結果が情報エリアに表示されます。
ブラウズ...ボタンにより、標準のファイルオープン用ダイアログボックスが表示され、ローカル上に保存された WSDL ファイルを選択することができます。すると、URLエリアには“file://”で始まるファイルへのアクセスパスが表示されます (このエリアにアクセスパスを手動で入力することもできます)。
作成ボタンを使用すると、選択した Web サービスに対応するプロキシメソッドが生成されます。
閉じるボタンを使用すると、Web サービスウィザードダイアログボックスが再度閉じられます。
WSDL ファイルの解析に基づいて Web サービスウィザードで生成されたプロキシメソッドは、即座に実行可能であり、そのまま使用できます (標準モード)。
しかし、WSDL の解析により得られたパラメーターを変更したい場合もあります。例えば、プロキシメソッド名を変更することができます。
また、Web サービスウィザードを使用して、自分でパラメーターを入力したプロキシメソッドを作成することもできます。この場合は、WSDL パーサーを使用しないでください。
メソッドを作成するために、すべてのパラメーターを入力する必要はありません。
パラメーターをひとつも入力せずに、プロキシメソッドの“テンプレート”を作成することも可能です。後から4Dのプログラムを使用して、この"テンプレート"にパラメーターを設定することができます。
これらの非標準モードでは、Web サービスウィザードの詳細設定パラメーターを使用しなければなりません。このパラメーターを表示するには、ウィザードウインドウの左下にある展開用のボタンをクリックします。すると、詳細設定パラメーターの各フィールドが表示されます。メソッドが選択されている場合は、これらのフィールドに現在のパラメーターが表示されます:

パラメーターはすべて変更可能です。ただし、WSDL の解析により生成されたパラメーターを変更すると (メソッド名を除く)、結果として Web サービスの動作が変わる可能性があるため、注意深く行わねばなりません。
詳細設定パラメーターについて次に説明します:
- メソッド名: 作成されるプロキシメソッドに対してウィザードが割り当てる名前。デフォルトとして、この名前は接頭辞“proxy_” (環境設定で変更可) に続けて、選択したメソッド名を指定して設定されます。この名前は自由に変更することが可能であり (例えば、データベースに同じ名前が既に存在する場合など)、変更しても Web サービスの動作には影響を与えません。
- Endpoint (エンドポイント) URL: プロキシメソッドが SOAP リクエストを送信する URL。
- SOAP アクション: SOAPActionフィールドの内容。通常、このフィールドには“サービス名#メソッド名”という値が納められます。
- 名前空間: Web サービスの名前空間 (詳細については、名前空間をカスタマイズするを参照)。
- パラメーターテーブル: この表には、公開メソッドについてパラメーターの一覧が表示されます。

表の各行にパラメーターが示されます:
- 最初のカラムは、そのパラメーターが入力タイプ (“in”) か出力タイプ (“out”) かを示します。この特性は、公開メソッド側ではなくプロキシメソッド側の視点から判断されます。
- 2番目のカラムは、パラメーター名を表わします。
- 3番目のカラムは、パラメーターの SOAP タイプを示します。4Dにより受け入れられる各種 SOAP タイプは、プロパティエリアにあるタイプメニューに表示されます。Web サービスウィザードは、プロキシメソッド内で各 SOAP タイプを対応する4Dのタイプに割り当てます。
次の表は、受け入れられる SOAP タイプの値と、それに対応する4Dのタイプを示しています:
SOAP タイプ | 対応する4Dタイプ |
boolean | ブール |
int | 倍長整数 |
time | 時間 |
float | 実数 |
double | 実数 |
date | 日付 |
string | テキスト |
base64Binary | BLOB |
ArrayOfBoolean | ブール配列 |
ArrayOfInt | 倍長整数配列 |
ArrayOfTime | 時間配列 |
ArrayOfFloat | 実数配列 |
ArrayOfDate | 日付配列 |
ArrayOfString | テキスト配列 |
AsXML | BLOB |
注: 厳密に言うと、AsXML タイプは SOAP タイプではなく、複合型の XML をサポートするために使用されます (複合型の処理参照)。
プロパティエリアには、この表で選択したパラメーターの特性が表示されます。Web サービスウィザードを使用すると、例えば、指定した WSDL ファイルが最新ではない
場合などに、既存のパラメーターの変更や新規パラメーターの追加を行うことができます。
- パラメーターを変更するには、パラメーターを選択してからプロパティエリアで変更を行います。
- パラメーターを追加するには、追加ボタンをクリックしてから、プロパティエリアでその特性を定義します。
- パラメーターを削除するには、リストからパラメーターを選択し、削除ボタンをクリックします。
注: 作成ボタンを使用して実際にプロキシメソッドが作成された場合にのみ、詳細設定パラメーターへの変更が反映されます。
コード内でプロキシメソッドを呼び出すには、プロキシメソッド名を記述して必要なパラメーターを渡します。これらのパラメーターは、Web サービスウィザードによりプロキシメソッドのヘッダーエリアで宣言されます。4Dにおけるメソッド間の引数受け渡しに関する標準的なシンタックスに従い、パラメーターには$0、$1、$2などの名前が設定されます。これらパラメーターは、公開メソッドの詳細設定パラメーターの説明エリアに表示され (詳細設定パラメーターを使用する参照)、またそのドキュメント内で説明される場合もあります。
例えば、メソッド名"WS_EuroConverter"の例では、プロキシメソッドは次の方法で呼び出されています:

このメソッドを実行すると、次の警告が表示されます:

注: プロキシメソッドがコンパイラによってスレッドセーフであると認定されれば、そのメソッドはプリエンプティブスレッドで実行可能です(64-bit版、コンパイル済みアプリケーションのみ、詳細はプリエンプティブ4Dプロセス 参照)。
4Dでは、RPC モードや DOC モード、および複合型で公開された Web サービスを使用することができます (RPC、DOC、複合型の互換性参照)。
注: 実際には複合 XML タイプであるにも関わらず、データ配列は4Dにより単純型として処理されます。
Web サービスウィザードにより生成された、複合型を含むプロキシメソッド (つまり複合型を伴う RPC モード、または DOC モードで公開されたメソッド) は、標準的なプロキシメソッドと似ています。しかし、これらの Web サービスを用いた特定のケースにおいて、WEB SERVICE CALLコマンドでは“manual”という語句を含む定数が引数として使われていることがわかります。
実際には、このような Web サービスを使用する場合は、さらに処理が必要となります。この主な理由は、複合型のやり取りが文書や XML 要素の形で行われるためです。つまり、これらの SOAP パラメーターで情報の取得や組み込みを行うには、事前に XML を解析する必要があります。これに対して単純型の場合は、パラメーターの値を直接読み取ることができます。
- 単純型の使用 (RPC)

- 複合型の使用 (DOC)

Web サービスウィザードでは、配列や複合型データのうち、1レベルのもの (SOAP リクエストにおける単独の階層レベル) しか完全にサポートされません。これ以上複雑な要素がリクエスト中に存在する場合、ウィザードはメソッド名の横に旗を表示して、そのことを表わします。通常、このタイプの Web サービスをサポートするには、開発者による独自の処理が必要です。
4Dでは、複合型のパラメーター (配列を除く) は BLOB 形式で処理されます。これらの BLOB の内容を処理するために、4Dの XML コマンドを使用することができます。詳細については、4DランゲージリファレンスマニュアルのWebサービス (クライアント)およびXML DOMテーマを参照してください。