リスト8●Indigoで定義するサービスの実体
クラスとメソッドに該当するプロパティを与える。
リスト9●サービスをホストするプログラム
サービスの提供形態を決める部分。ここではコンソール・プログラムでサービスを実現した。
リスト10●サービスの提供形態を決める設定ファイル
サービスが使用するポートやプロトコルなどを記述する。

Indigo
すべての通信を透過的に扱う

 IndigoはLonghorn SDK付属のドキュメントによると,「Longhornにおける通信サブシステム」と定義されている。すべてのアプリケーション間通信を仮想化するレイヤーである。例えば同一のコンピュータの異なるプロセス間通信や,LAN環境における異機種分散システム,インターネットを介したWebサービスなど,すべてのコンピュータ間通信をIndigo経由で実現する。これまでのWebサービスやRPC,DCOMなどを仮想化するイメージだ。厳密に言えばIndigoは,.NET Frameworkの1.2版で付加される予定である。

 Indigoのアーキテクチャは階層型である。Indigoのサービスとクライアントとも,「ServiceEnvironment」を通じてサービスを利用したり提供したりする。ServiceEnvironmentは設定ファイルを読み込み,どのような手段で通信するかなどを決定する。逆に言えば,ここを切り替えることで社内向けのサービスか,Webサービスかなどを切り替えられる。

サービスの作り方は変わらない

 具体的にサービスを作ってみる。まず第1に,サービスの実体を作成する。ここはこれまでの.NET FrameworkでWebサービスを実装したときのように,メソッドにプロパティを付与するだけである。「WebMethods」というプロパティを従来与えたのに対し,Indigoではクラス全体に「DatagramPortType」というプロパティを与え,公開するメソッドに「ServiceMethod」という属性を付与する(リスト8[拡大表示])。

 次にこのサービスを提供する(ホストする)プログラムを記述する。ここでServiceEnvironmentが登場する(リスト9[拡大表示])。ServiceEnvironmentのクラスを生成し,設定ファイルを読み出す。また,サービスを提供するクラスもここで指定する。この段階を踏んで初めて,サービスを提供できるようになる。

 サービスの設定ファイルには,サービスを提供するポートなどを記述する(リスト10[拡大表示])。ここではSOAPトランスポートにTCPトランスポートを適用し,ポート番号は46001番であると記述している。このほか,セキュリティ・マネジャの適用などのサービスの振る舞いを規定できる。

サービス主体に考える

 Indigoは「すべての分散アプリケーションをサービスとして実装する」という考え方に基づいている。具体的には,サービス指向アーキテクチャ(SOA)の考え方を取り入れている。RPC(リモート手続き呼び出し)やCORBA(Common Object Request Broker Architecture)のような,タイトに結び付けられた分散システムではなく,緩やかな分散システムを構築する。比較的粒度の大きな単位にシステムを分割できるようにし,変化に柔軟に対応できるシステム作りを目指すものだ。

 SOAはしばしばWebサービスと一緒に語られるキーワードだったが,Indigoはこれが社内システムやローカルで動くアプリケーションでも使える可能性を示している。

(北郷 達郎)