連載:世界のWebサービス
第5回 非.NET環境のWebサービス

1.Microsoft SOAP Toolkit 2.0

田口 景介
2001/06/07

 長期的にはできれば.NET上で実装して欲しいとしながらも、Microsoftは非.NET環境で動作するWebサービスを実装するためのツールキットとして、Microsoft SOAP Toolkit 2.0(以後MSSOAPと略す)をリリースしている(Microsoft MSDN .NET Online Informationのページからダウンロード可能)。MSSOAPは昨年からバージョン1.0がリリースされていたが、この時点ではまだSOAPのバージョンは1.0であり、またWSDLの仕様も決まっていなかった。このためMSSOAP 1.0はMSDNのサンプル・アプリケーションとして位置づけられ、暫定ツールキットとしてリリースされていた。その後SOAPはバージョン1.1となって仕様が固まり、また従来暫定的に使われていたSDL(Webサービスのインターフェイスを定義するファイル)も、SOAPと同じくW3Cによって標準化されたWSDL 1.1で置き換えられた。これを受けて、正式なツールキットとしてリリースされたのがMSSOAP 2.0である。ちなみに、.NET FrameworkによるWSDLサポートは、2001年6月中旬にも公開が予定されているベータ2からとなる。

■.NET Frameworkを使わずにWebサービスを実装可能
 今述べたとおりMSSOAPはWebサービスを実装するためのツールキットで、Windows NT 4.0+SP6/Windows 2000をプラットフォームとして動作する。言うまでもなく、MSSOAPを使ってWebサービスを実装し、サービスを提供するために、.NET Frameworkは不要だ。またSOAPクライアント・アプリケーションの開発にMSSOAPを使うのであれば、Windows 98/ME/Windows NT 4.0+SP6/Windows 2000がプラットフォームとして利用可能だ。こちらの場合も同様に.NET Frameworkは必要ない。

 MSSOAPで提供されるライブラリはCOMオブジェクトとして実装されているため、COMオブジェクトをハンドリングできるプログラミング言語ならば、どんな言語でも開発に利用できる。つまり、Visual BasicやVisual C++といった、非.NETプログラミング言語が利用できるということだ。

 ところで、あえてMicrosoft.NETに頼らず、既存の環境を生かしてWebサービスを実装する利点はどこにあるのだろうか。それは、ひとえに最小限の労力でWebサービスを実装できる点につきる。

 .NET上でWebサービスを実装するためには、C#やVB.NETといった新出のプログラミング言語を習得しなければならず、さらに.NET Frameworkについても学ばなければならない。プログラミング言語の習得はともかく、.NET Frameworkの習得は一筋縄ではいかないだろう。

 Windowsユーザーのあなたが初めてUNIXに触れたとき、逆にUNIXユーザーのあなたが初めてWindowsに触れたとき、いきなりビギナー時代に逆戻りした感覚を覚えたことはないだろうか。.NETはWindowsをベースに実装されてはいるものの、その実体は新OSと言って差し支えない。つまり、.NET上での開発は、この体験を繰り返すことにほかならない。プログラマは、いかにしてWebサービスを実装するかを考える前に、すべてが新しくなった.NETプラットフォームに慣れるところから始めなければ、.NET上ではWebサービスを実装できないのだ。

 さらに、C++やVBで開発された既存のコードをWebサービス向けに流用したくとも、.NET上で動作させるためには、相当に手を入れなければならないだろう。

 これに対して、MSSOAPを利用すれば、既存のプログラミング言語、既存のAPI、既存のコードを利用できるため、プログラマはWebサービスとしての体裁を整えるために必要な知識だけを身につけるだけで、Webサービスの開発が可能になる。もしMicrosoftが.NETの普及よりも、Webサービスの普及を優先的に考えているのだとしたら、迅速にWebサービスの開発を行えるMSSOAPの提供は驚くにはあたらない。

■ISAPIモジュールかASPとして実装
 .NET環境では、IISがWebサービスをホスティングする役割を担うが、この点ではMSSOAPでも同様である。したがってMSSOAPで実装したWebサービスを公開するには、IIS 4.0/5.0が必要となるため、実行可能なプラットフォームはWindows NT 4.0/2000に限られる。

 ただし、公開する方法は同じではない。MSSOAPを使ったWebサービスは、ISAPI(Internet Server API)モジュール、またはASPとして実装するためだ。ISAPIモジュールとは、IISの機能拡張モジュールである。ある拡張子とISAPIモジュールの対応をIISに定義しておけば、その拡張子を含むURLをリクエストしたとき、ISAPIモジュールが呼び出される。たとえば、拡張子.plにPerl ISAPIモジュールを割り当てておけば、CGIのようにPerlスクリプトがPerl ISAPIモジュールで実行される。この仕組みを利用して、IISは、ISAPIモジュールとして実装したWebサービスを呼び出すわけだ。しかし、この仕組みでは拡張子とISAPIモジュールが1対1に対応するため、Webサービスごとに異なる拡張子を用意しなければならなくなってしまう。これはWebサービスを公開する手段としてはあまりスマートではないので、通常はASPを使うことになるだろう。ASPを利用する場合は、下のリストに示すように、COMオブジェクトとして実装したWebサービスを呼び出すコードをVBScriptなどでASPページに記述することで、ASPページを介してWebサービスへとアクセス可能になる。

<%
    'WebサービスはCOMオブジェクトSample.CalcSrvとして実装されている
    set CalcSrv = Server.CreateObject(“Sample.CalcSrv”)
    CalcSrv.Process Request, Response
%>
COMオブジェクトを使用してWebサービスを提供するASPコードの例

■Webサービスの実体はCOMオブジェクト
 Webサービスのクライアント・アプリケーションを作成するには、最初にWebサービスとセットになって提供されるWSDLファイルを入手する。そして何らかのツールを使って、このWSDLファイルに記述されているWebサービスの情報を元に、開発言語に応じたプロキシ・コードを生成する。例えば.NET Framework SDKならば、webserviceutil.exeを使用する(ただしこのツールは、WSDLではなくSDLを参照する。ベータ2にはWSDLを参照するwsdl.exeが付属予定)。これが一般的なクライアント・アプリケーションの作成手順だ。このため、Webサービスを開発するときには、必ず対になるWSDLファイルを作らなければならない。

 これに加えて、MSSOAPを利用する場合には、WSML(Web Services Meta Language)ファイルも作る必要がある。MSSOAPのWebサービスは、COMオブジェクトをラッピングする形で実装するからだ。つまり、MSSOAPはWebサービスをフルクラッチで開発するよりも、どちらかというと既存のCOMオブジェクトをWebサービスとしてリモートコールできるようにするために存在するのだ(1からWebサービスを開発することも可能)。このため、Webサービスとして公開するインターフェイスと、COMオブジェクトのインターフェイスをマッピングする必要がある。これを定義するのがWSMLファイルである。

 以上2つのファイルの作成を支援するために、MSSOAPにはWSDL Generatorが用意されている。

WSDL Generator
Microsoft SOAP Toolkitを利用すれば、.NET Frameworkを使わずに、Windows上で動作するWebサービスを開発可能だ。SOAP Toolkitでは、COMオブジェクトをラッピングすることでWebサービスを実装する。開発支援ツールWSDL Generatorを利用すれば、指定したCOMオブジェクトからWebサービスに必要な情報ファイルを自動生成できる。

 このツールを利用すると、指定したCOMオブジェクトのタイプ・ライブラリからインターフェイスを取得し、WSDLファイルとWSMLファイルを自動生成できる。  

関連リンク
Microsoft MSDN .NET Online Information
 

 INDEX
  [連載]世界のWebサービス―― 究極のWebサービスを求めて ――
  第5回 非.NET環境のWebサービス
  1.Microsoft SOAP Toolkit 2.0
    2.Apache SOAP
 
「世界のWebサービス」


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Insider.NET 記事ランキング

本日 月間