Silverlight をインストールするには、ここをクリックします*
Japan変更|すべてのMicrosoft のサイト|サインイン
MSDN*
マイクロソフト サイトの検索:
|MSDN ライブラリ|デベロッパー センター|ダウンロード情報|開発ツール製品|コミュニティ|ご意見・ご要望|サイトマップ
MSDN Home > 連載コラム > More or Hess > Microsoft .NET XML Web サービス

Microsoft .NET XML Web サービス

Robert Hess
Microsoft Corporation

August 20, 2001
日本語版最終更新日 2001 年 10 月 12 日

これまでおよそ 5 年間わたってわたしはこの連載記事の執筆を非常に楽しんできました。その間、Web デザインの問題、スクリプティング、色彩理論、N 階層アーキテクチャ、ユーザー インターフェイス デザインを取り上げ、ごく最近では、新しい .NET アーキテクチャにまつわるトピックスを紹介しました。願わくば、私がこのような話題を調べたり、皆さんに紹介したりした時と同様に、皆さんがこの記事を読んで楽しめたことを期待します。しかしながら、全ての好事にはいつか終わりの時があるはずです。どうやら、私がこのコラムから離れる時がやってきたようです。でも心配は無用です。もうこれで皆さんの前から姿を消してしまう訳ではありません。"The .NET Show" でホストを務めている時や様々な開発者イベントで話をしている時に、これまでどおり私のことを見つけることができると思います。そして、将来的には MSDN の定期記事の筆者として時には姿をお目に掛けたいと思います。それでは、また Web 上でお会いしましょう。
Robert Hess
Group Manager
Platform Strategy Group

最近では XML Web サービスについての話をよく耳にします。それは一般的な内容のときもあれば、.NET を介して提供されるものであるとか、Microsoft Visual Studio® .NET を使った開発が容易であるとか、いかに .NET My Services のバックボーンとなるかなどと特定の内容でもあります。さまざまなドキュメント、ホワイト ペーパー、雑誌などの発表記事を読んでいる方なら、そのアーキテクチャ構造、ビジネス モデルについての審査、サービス インフラストラクチャに関する考察、そのほかそれらに関連したものすべてに対し怒りを感じ、悩まされてきたことでしょう。それどころか私はこの数か月間それを皆さんに押し付けてきたのです。いずれにしても、このとんでもないものをいかに利用することができるのでしょうか?

この記事で、私は XML Web サービスがいかにわかりやすいものかを示す非常に簡単なコードと、それらをほぼ即座に使用できる方法を紹介したいと思います。

長年にわたるコンピュータ経験のある皆さん、私たちはあらゆる種類の有力なコンピュータ システムが存在していた初期の時代を覚えているかと思います。私はなにも大学やデータ処理会社が所有していた大型マシンのことを言っているのではなく、家庭用のマシンのことを言っているのです。Apple、IBM、Texas Instruments、KayPro、Commodore、Timex、Radio Shack、そして Mattel までもがあらゆるサイズおよび形態の "パーソナル コンピュータ" を製造していました。ある会社が別の会社よりも成功した理由に対するさまざまな議論がなされていますが、私はその当時私自身がどう感じていたかを覚えています。

私がコンピュータについての本を読み、さまざまなコンピュータを試してみて、家庭用に適しているのはプログラマの観点から見て即座に機能させることのできるコンピュータだと感じました。私がここで言っているのは、パッケージされたプログラム (通常はゲーム) をただ実行するだけでなくそれ以上のことができるコンピュータのことです。私がいいと思ったのは、ただ座って自分自身のコードで書くだけでよく、ほかに追加のハードウェアやソフトウェアを購入する必要のないものでした。私が書くことのできたプログラムは人為的に限られていましたが、基本的にはコンピュータの全局面にアクセスすることができるものでした。それが "機能的な" コンピュータだったのです。

私の最初のコンピュータは TI 99/4A でした。コンピュータとしてはかなり良いもので、BASIC が組み込まれており、ディスプレイはフルカラーで、プログラム可能なスクリーン フォントが採用されていました。しかし残念なことに、組み込み BASIC には限界がありました。アセンブラでプログラムするには、追加の開発ソフトウェアだけでなく、拡張メモリ モジュール (EMM) を購入しなければなりませんでした。さらに、そのプログラムを実行するコンピュータにも EMM が必要でした。しばらく注目を浴びた後、結局 TI はその影を潜めてしまいました。次のコンピュータは Apple //c でした。これは BASIC やアセンブラでプログラムを作成できる十分に機能的なコンピュータで、ファームウェアに組み込まれた下位レベルの機能にアクセスできる PEEKS および POKES 機能を持っていました。出荷時の状態ですぐに使用でき、それ以外に何も購入する必要がなかったのです。

これらのことはすべて、"テクノロジの成功" にとって私が重要だと考える 1 つの側面を強調しています。つまりそれは、特別なハードウェアやソフトウェアなどを必要とせずに、広範囲で共有度の高い利用性およびアクセスの容易さを提供するということです。テクノロジを個人の手の届きやすく有益なものにすること、それが本当に重要なことなのです。このことが XML Web サービスとどう関係しているのでしょうか?

私が XML Web サービスの素晴らしさを大声でわめき立てることはできても、さまざまなソフトウェアなしで実際に使用できなければ、その素晴らしさを本当に理解することはできないでしょう。ここでは、Microsoft Windows® XP のみを使用して、プログラムで XML Web サービスにアクセスする方法を説明します。たしかに、Microsoft Windows XP のインストール作業を 1 度行うことになりますが、それはすべての Windows システムにおいて行わなければならないノルマであることを理解してください。

Windows XP には非常に重要な要素が 2 つ含まれており、それらが XML Web サービスへのアクセスおよび使用を可能にしています。1 つは Windows Scripting Host で、Windows (すべてのバージョン) の最近のリリースに含まれており、ほぼ標準的な要素となっています。もう 1 つは Microsoft Soap Type Library です。これは、.NET XML Web サービスへのアクセスと対話を行うために必要なプログラム インターフェイスを提供します。話はこれくらいにして、先へ進みましょう。

Windows XP を実行している場合は、次の作業を行います。

  1. "Mystic.vbs" という名前のテキスト ファイルを新規作成します。
  2. このファイルに次の VBScript コードを入力します。
    SET scEightBall = CreateObject("MSSOAP.SOAPClient")
    scEightBall.mssoapinit _
       "http://www.gotdotnet.com/playground/services/eightball/EightBallWS.asmx?WSDL"
    WScript.Echo scEightBall.Ask("今週の金曜にデートする相手はいるだろうか?")
    
  3. ここでスクリプト ファイルを実行してください。スクリプト ファイルを実行するには、アイコンをダブルクリックするか、コマンド プロンプトで次のように入力します。
    C:\> cscript mystic.vbs
    

上記のいずれかの方法で、先ほどの重要な質問に対しての回答が返ってきます。これで、XML Web サービスを初めて使ったことになります。では私たちが何をしたのか、それがどううまく働いたのかを簡単に見てみましょう。

まず最初に、今回の目的に使用できる .NET サービスを見つけることが大切です。これはおそらく全体のプロセスの中で最も難しい部分でしょう。UDDI はサービス ディレクトリで、インターネット ベースのサービスを目的として作られています。UDDI に関して 1 つ気を付けなければならないのは、UDDI は上記の私のコードが示すような方法で使用できる一覧サービスだけではないことです。そのため、私たちは慎重にサービスを選択しなくてはなりません。特に重要なのは、.asmx?WSDL で終わる URI を使用することです。ここで ASP.NET が要求されて、XML Web サービスのために WSDL (Web サービス記述言語 : Web Services Description Language) を提供します。Microsoft Soap Type Library は、WSDL を介することによって、XML Web サービスで表示されるインターフェイスと、それとの対話方法を認識できます。

偶然見つけたのですが、www.GotDotNet.com Leave-ms に XML Web サービスの例がいくつか記載されており、私が今回の例に使えそうなものを探す際に役立ちました。以下は、上記の 3 行のコードがどのようなものでなくてはならないかを私が正確に知ることができた方法です。

  1. まず http://uddi.microsoft.com Non-MSDN Online link に行きました。これは彼らが提供するさまざまなビジネスやサービスの広範囲なディレクトリです。
  2. [Search by business name] フィールドに「GotDotNet」と入力しました。ほかにもさまざまな方法がありますが、状況からみてこの検索を行うのが最も簡単な方法でした。
  3. 次の検索結果 (リンク付き) が返されました。
    • GotDotNet Non-MSDN Online link

      The .NET Framework Community Website

      これはもちろん私が探していたものであり、当然このリンクをクリックしました。

  4. GotDotNet に登録されているサービスが一覧表示されました。そこには次のようなリンクが含まれていました。
名称 説明
.NET Resources Non-MSDN Online link GotDotNet リソース センターは .NET Framework リンクのさまざまなディレクトリへのポータルです。そこには多くの .NET Framework Web サイトへのリンクが掲載されています。
Thumbnail Generator Non-MSDN Online link Thumbnail Generator Web サービスは、指定した URL の .gif 画像を作成するものです。このサービスでは、画像をあらかじめ決められた時間だけサーバーに保管し、それにアクセスするための URL を返します。
Quote of the Day Non-MSDN Online link ここでは、興味深い引用文が返されます (毎日更新)。
EightBall Non-MSDN Online link EightBall Web サービスは、米国で有名なおもちゃ "エイト ボール" (無作為に回答を表示するボール状のおもちゃ) をまねたものです。多くの標準的な答えを備えた XML ファイルから 1 つを任意に選んで返します。
test テスト用の Web サービスです。刺激的なものではありませんが、必要な時には便利です。
  1. このリストの中で興味深く思われたのは Quote of the Day Non-MSDN Online linkEightBall Non-MSDN Online link の 2 つでした。EightBall からの回答は 1 日に 2 回以上変わるため、より動的なもののように思われたので、私は良い選択だと考えそれをクリックしました。
  2. UDDI Web サイト上の次のページには EightBall Web サービスについてのさらに詳しい情報が記載されています。そこには XML Web サービスのベース URL である http://www.gotdotnet.com/playground/services/eightball/EightBallWS.asmx Leave-ms へのリンクがあります。次にこのリンクをクリックしてみましょう。
  3. 表示されるページは、ASMX ファイルをクリックすることによるものです。ここで注目すべき重要な点は、表示されたページは ASMX ファイルのコンテンツではなく、ASP.NET によって皆さんのために作成されたコンテンツだということです。ASP.NET は、ASMX ファイルのコンテンツを解釈し、XML Web サービスと利用可能な操作を文書化する HTML を作成します。この場合、サービスの名称 (EightBallWS) が表示され、それが 1 つの操作 (Ask) を提供するということがわかります。
  4. [Ask] をクリックして得られる情報はこのインターフェイスの SOAP の説明だけではありません。この機能が入力パラメータとして文字列を受け入れ、結果の文字列を返すことがわかります。また、このページではこのサービスのテストに使用できる簡単なフォームも利用できます。[Value] ボックスに質問を入力して [Invoke] ボタンを押すと、それに対する回答を伴う XML を表示する Web ページに戻ります。

さて、この機能を特定の目的で使用するためにコード化する際の要点がわかってきました。特に次の要点が重要です。

こんどは私の書いたコードを段階を追って詳しく見ていきましょう。

SET scEightBall = CreateObject("MSSOAP.SOAPClient")

これは私が使うであろう SOAP クライアント オブジェクトを作成するコードです。

scEightBall.mssoapinit _
   "http://www.gotdotnet.com/playground/services/eightball/EightBallWS.asmx?WSDL"

このコードは私の SOAP オブジェクトを初期化し、使用する XML Web サービスでそのオブジェクトをポイントします。また第 2 パラメータ (オプション) を "mssoapinit" に加えることも可能です。これは "EightBallWS" (加えたかったサービスの名称) になります。次のようになります。

WScript.Echo scEightBall.Ask("今週の金曜にデートする相手はいるだろうか?")

この短いコードは、このサービスから私がアクセスしている 1 つのメソッドを呼び出し、画面に結果を表示します。

以上のことから、.NET XML Web サービスを利用する単純なアプリケーションを作成することがいかに簡単であるかがわかります。ユーザーと XML Web サービスとのプログラムによる対話を提供する Windows Scripting を使うことにより、プログラミングのレベルは私たちが皆直接体験することのできる水準にまで下がります。

より完全に近いものを完成させるために、私はこの単純なアプリケーションの開発を続け、皆さんが質問を動的に入力することのできる、より強固なバージョンを作成しました。また、コマンド行からでも、アイコンのダブルクリックによってでも適切に機能するようにコードを修正しました。

SET scEightBall = CreateObject("MSSOAP.SOAPClient")

scEightBall.mssoapinit _
"http://www.gotdotnet.com/playground/services/eightball/EightBallWS.asmx?WSDL"

Set objArgs = WScript.Arguments
DIM a
FOR i = 0 to objArgs.Count - 1
   a = a & objArgs(i) & " "
NEXT

a = Trim(a)
DO WHILE len(a) <= 0
   a = Trim(Prompt("どんな質問ですか?"))
LOOP

answer = scEightBall.Ask(a)

WScript.Echo vbCRLF & "回答 : " & answer


FUNCTION Prompt (question)
   IF len(question) <= 0 THEN question = "質問を入力してください"
   ON ERROR RESUME NEXT
   WScript.StdOut.Write question & ": "
   IF (Err.Number = 0) THEN
      Prompt = WScript.StdIn.ReadLine
   ELSE
      Prompt = InputBox (question)
   END IF
END FUNCTION

注目すべき点は、このサービスが単純な入力パラメータを受け取り、結果を単純な値で返すことです。.NET XML Web サービスでは、複雑な構造やデータセットを受け取ったり渡すことが可能です。また、このような操作は、複雑な構造をネイティブで扱うことのできるプログラミング言語でも、私がここで "String (文字列)" パラメータを使用して皆さんにお見せしている操作と同様に簡単に行うことができます。しかしながら、そういった複雑さは Windows Scripting の一般的な適用範囲を超えるものなので、上記のようなプログラムに関しては、単純なパラメータを使用する XML Web サービスを使うのが最善でしょう。より複雑なパラメータを使用することは可能ですが、それはこの記事では扱いません。

.NET XML Web サービスとそれらを用いたプログラミングに関するリンクをいくつか挙げます。


Robert Hess は、MSDN Show (英語) を担当しています。


Microsoft