豊田 孝

 本連載ではこれまで,次のような技術項目を学習してきました。

  • クラスはWebサービスとしてインターネットに公開できる
  • Webサービスは,業界標準言語であるWSDLで表現されたクラスである
  • HTTP,XML,SOAPなどの標準プロトコル技術は隠ぺいされる
  • クラスの定義・実装ではVisual Studio .NETやVisual C# .NETなどの複数の言語が利用できる

 W3Cは,Webサービス基本アーキテクチャを次の3つの機能に分けています。詳細はこちらを参照してください。

  • Exchanging messages(メッセージ交換機能)
  • Describing Web services(Webサービスの説明機能)
  • Publishing and discovering Web service descriptions(Webサービスの公開と発見機能)

 これまでの連載では,これら3つの機能のうち,「Webサービスの公開と発見機能」については一切触れていませんでした。この機能は,一般にはUDDIと呼んでいます。UDDIは,Universal Description,Discovery and Integrationの頭文字からできています。具体的な説明は後ほど行います。

 本日は,米国ではすでに開発が完了したといわれるWindows Server 2003プラットフォーム(評価コピービルド3718)にVisual Stuido .NET Version 2003開発環境(バージョン7.1.2235)をインストールし,Webサービスと米Microsoftの関係を具体的に検討してみることにします。開発環境には,バージョン1.1.4322という.NETフレームワークが組み込まれています。

 ほとんどの方はこれらの環境をお持ちでないでしょうから,“Microsoft社はどんなことをことを考えているのか”程度の軽い気持ちでお読みください。

Windows .NET Server 2003について

 もし,みなさんのお手元にWindows Server 2003があるようでしたら,こちらのページからNo9ListNameSpaces.exeというサンプル・コードをダウンロードし,実行してみるとよいでしょう。詳細な説明は省略いたしますが,表面的には,目を見張るような変更はありません。どちらかといえば,WebサーバーをはじめとするWeb関連サービス・プロセスをユーザーが自己責任でインストールする方針が打ち出されています。必要な機能をインストールしていくと,管理ツール(名前空間番号47)がどんどん増えていきます。ぜひダウンロードし,Windows 2000 ServerとWindows Server 2003それぞれの環境から返される情報を比較してみてください。比較する際には,表面上には見えない,オブジェクト数やメソッド数の増減に注目するとよいでしょう。

Visual Studio .NET 2003について

 Visual Studio .NET 2003は,“.NETフレームワーク機能を効率的に利用するための開発ツール”という本質的な役割は変わりません。こちらも一見すると大きな変更がないような印象を受けますが,すでに言及した「Webサービスの公開と発見機能」と“Webサービスとはそもそも何なのか?”へのMicrosoft社の基本認識がより鮮明に表明されています。それでは,この基本認識を具体的なサンプル・プログラムを作りながら,検討してみましょう。

図1●Visual Studio .NET 2003の「Web参照の追加」機能
図2●第1カテゴリ機能を起動すると,前回作成した2つのWebサービスが発見できる
図3●Visual C# .NETで定義・実装したWebサービスを選択する
図4●「サービスの説明」リンクをクリックする
図5●第3カテゴリをクリックする
図6●「Service Description」リンクをクリックする
図7●“クラスビュー”機能を呼び出してみる

サンプル・プログラムの作成

 ここでは,Webサービスを利用する単純なコンソール・アプリケーションを作成してみます。Visual Studio .NET 2003などの開発ツールを使用する最大の利点は,開発効率の向上です。自分のアプリケーションからインターネットに公開されているWebサービスを呼び出したい場合,使用している開発環境が利用できそうなWebサービス候補をリスト表示してくれると,アプリケーションの開発効率は大幅に改善します。Visual Studio .NET 2003は,「Web参照の追加」という機能を用意し,Webサービス発見プロセスを効率化しています(図1[拡大表示])。

 この画面は,「Web参照の追加」ボタンをクリックした直後の様子を示しています。ベータ版ということもあり,画面情報はまだ英文のままですが,この画面は「Webサービスの発見」を支援する機能を提供していることが分かります。注目して欲しいのは,ブラウズ対象カテゴリが4種類あることです。以前のVisual Studio .NETでは4種類のカテゴリは用意されていませんでした。

 ブラウズ対象カテゴリを4種類用意しているということは,単純に考えると,Webサービスの利用方法や公開方法が4種類あるということを意味します。

 最初のカテゴリは,ローカル・マシン上のWebサービスを発見する機能です。これはCOMクラスを呼び出すような感覚でWebサービスを使用する,と考えると分かりやすいと思います。

 第2のカテゴリは,ローカル・ネットワーク上のUDDIサーバーに登録されているWebサービスを発見する機能です。こちらは,DCOM(分散COM)クラスのWebサービス化と考えると分かりやすいと思います。

 第3と第4カテゴリは,インターネット上のUDDIサーバーに登録されているWebサービスを発見する機能です。考え方としては,UDDI Business Registryという表現が使われているように,WindowsシステムレジストリのCOMサーバー登録情報のインターネット空間への移し変え,と考えてしまうと分かりやすいと思います。

 文章だけでは概要をつかみにくいでしょうから,まずは第1カテゴリ機能を起動してみます(図2[拡大表示])。ご覧のように,前回作成した2つのWebサービスを発見しました。それではここで,Visual C# .NETで定義・実装したWebサービスを選択してみます。画面は図3[拡大表示]のように変化します。

 本連載をここまでお読みいただいている皆さんは,この画面の背後で行われている動作を理解できるはずです。それではここで「サービスの説明」リンクをクリックしてみましょう(図4[拡大表示])。以前は,WSDL定義情報が表示されてきましたね。

 以前と異なり,WSDL定義情報でなく,その解析結果が返されてきます。この画面でマウスを右クリックすると,ソース・コード表示機能が選択可能となり,WSDL定義情報を見ることができます。このあたりで画面右側にある「参照の追加」ボタンをクリックしておきます。

 今度は,インターネット空間に公開されているWebサービスを発見する第3カテゴリをクリックしてみましょう。いくつかの操作を行っていくと,最終的に図5[拡大表示]のような画面が表示されます。

 画面には「Service Description」リンクがありますから,クリックすると図6[拡大表示]のような画面が表示されます。メソッド・シグネチャのLoadColors() As ArrayOfStringなどから推測すると,このWebサービスはVisual Basic .NETで実装されているような印象を受けます。ここではこれ以上の技術的な詳細は省略しますので,UDDI登録経由でのWebサービス公開と発見の大きな流れを把握するとよいでしょう。それではここで,「参照の追加」ボタンを押しておきましょう。

 以上の操作により,プロジェクトには2つのWebサービスへの参照が設定されたことになります。それではここで,開発環境が用意している“クラスビュー”という機能を呼び出してみます(図7[拡大表示])。

 ご覧のように,インターネット空間に公開されているTextToImageクラスとローカル・マシン内のNo9ServiceCSクラスへの参照が設定されています。すでに説明したように,UDDIはインターネット上に公開されているWebサービス記述を発見し,統合するための機能です。図7を見ると分かるように,きちんと統合されています。TextToImageクラスを使用する場合,例えば,次のようなコードを記述します。

リスト1●公開するNo9csClassクラスをASMXファイルとは別のファイルに実装する
using System;
using ITPro10.com.teachatechie;

namespace ITPro10
{
 /// <summary>
 /// Class1 の概要の説明です
 /// </summary>
 class Class1
 {
  /// <summary>
  /// アプリケーションのメイン・エントリ・ポイントです
  /// </summary>
  [STAThread]
  static void Main(string[] args)
  {
   TextToImage ttm = new TextToImage();
   string[] str = ttm.LoadColors();
   foreach(string strout in str)
   {
    Console.WriteLine(strout.ToString());
   }
   Console.ReadLine();
   //
   // TODO: アプリケーションを開始するコードをここに追加してください
   //
  }
 }
}

図8●サンプル・プログラムの実行画面
 プログラミング言語にまだ慣れていない方はちょっと難しいと感じられるかもしれませんが,通常のデスクトップ・アプリケーションを作成する感覚で作業することができます。基本は,名前空間とクラスの基本知識だけ,です。参考のために実行画面を紹介しておきます(図8[拡大表示])。

 私のシステム内で利用できる色名が表示されてきます。後日いろいろ試してみてください。なお,UDDIの仕様や実際の登録・運営に関しては,こちらのサイトを参照するとよいでしょう。IBMなどのUDDIサーバーのリンクも張ってあります。

 本連載は以上で終了です。ご閲覧ありがとうございました。またどこかでお会いいたしましょう。失礼いたします。