.NET Framework入門

8.ASP.NET(3)

― Web Service開発始めの一歩。サービス公開に必要なのはキーワード指定1つ ―


デジタルアドバンテージ 遠藤孝信
2000/12/14

p.1 p.2 p.3 p.4 p.5 p.6 p.7 p.8 p.9

本記事は改訂されました。改訂版の「.NETとは何か? ― 基礎解説:.NET初心者のための.NET入門【2011年版】」をご覧ください。

Web Service開発を大幅に簡略化してくれるASP.NET

 ASP.NETを使用すれば、Web Serviceを作成し、公開するのは非常に簡単である。具体的には、単に関数(メソッド)に「WebService」というキーワードをつけるだけでよい。.NET Frameworkでは、たったこれだけで、特定クラスの特定のメソッドを、SOAPインターフェイスを通じてインターネットにサービスを公開することができる。

 コード例を見てみよう。これはC#で記述した簡単なプログラムで、2つのパラメータを受け取り、それらの合計値を返すというサービスの例だ。このようにC#では、メソッドの前に[WebMethod]という属性をつける(7行目)。後は、このようなメソッドを含んだC#のプログラムを、拡張子.asmxをつけたファイルとして、インターネットからURLでアクセスできるように(「http://〜」でアクセスできるように)IISのディレクトリに配置すればWeb Serviceの出来上がりである。

add.asmx
2つのパラメータを受け取り、その合計値を返す単純なWeb Serviceの 例(C#を使用)。これはコードの一部分ではなく、すべてである。こ れだけでも立派なWeb Serviceが出来上がる。

 1行目は、ASP.NETに対し、このファイルがC#で記述されたWeb Serviceであると伝えるものである。ここではC#を使用したが、CLR対応の任意のプログラミング言語を利用可能だ。そして8〜11行目が、サービスとして公開するためのメソッドである。このMathServiceクラスにはメソッドが1つしかないが、このほかにメソッドがあっても、[WebMethod]を付けなければ、そのメソッドはWeb Serviceとしては公開されない。

 ちなみにこのWeb Serviceをブラウザから呼び出すと次の画面のようなページが表示される。ここではlocalhost(IISを実行しているローカルマシン)のtestという仮想ディレクトリにWeb Serviceを配置したので、そのURLは「http://localhost/test/add.asmx」となる。

Web Serviceの参照用ページ

本来Web Serviceはソフトウェアが呼び出すもので、ユーザー・インターフェイスを備えないが、ASP.NETには、Web Serviceに対して自動的に生成されるWeb Serviceのテスト・ページが用意されている。これがそのテスト・ページで、テキスト・ボックスに適当な数値を入力して[Invoke]ボタンをクリックすると、Web Serviceが呼び出され、その答えがXML形式で返される。
  1つ目のパラメータを入力する。
  2つ目のパラメータを入力する。
  2つのパラメータを入力したら、このボタンをクリックしてWeb Serviceを呼び出す。

 これはWeb Serviceに対して自動的に生成されるWeb Service参照用のテスト・ページである。ここでテキストボックスに値を入力して「Invoke」ボタンをクリックすると、Web Serviceが起動され、その戻り値として次のようなページが表示される。表示内容から、戻り値はXML形式であることが分かる。

ブラウザからWeb Serviceを実行した結果

先ほどのWeb Service参照用画面で「3」と「6」を指定して、[Invoke]ボタンをクリックしたところ。Web Serviceからの戻り値はXML形式であることが分かる。

 次は、このWeb Serviceをプログラムから呼び出してみよう。Visual Studio.NETを使用せずに、このようなプログラムを作成するためには、まず「WebServiceUtil.exe」というツールで、

を実行する。WebServiceUtilは、与えられたURLで参照可能なWeb Serviceを呼び出すためのプログラム・コードを生成するツールだ。今回の例では、これによってMathService.csというC#のプログラムコードが生成される。ファイル名に使用されている「MathService」は、呼び出すWeb Serviceのクラス名から生成されたものである。このファイルをエディタで開き、編集して次のようなコードを追加する。ちなみに、このコードはMathService.csとは別ファイルとして記述してもよいが、この場合にはMathService.csをDLLとしてコンパイルする必要がある。

MathService.csに追加するコード

 このクラスの「Main」メソッドは、プログラムを実行したときに最初に呼び出されるエントリ・ポイントである。また、System.Console.WriteLine()は、コンソールに文字を出力するために用意されたメソッドで、C言語のprintf関数と同等なものと考えてもらえばよい。

 このファイルをコンパイルし、コマンドプロンプトから実行すれば、ほんの少し間をおいて「7」が結果として表示される。Web Serviceを呼び出しているような特殊なコードはいっさい記述していないが、実際にWeb Serviceが起動されている。ほんの少し間が空くのは、Web Serviceがロードされ、実行されているためである。このように.NET FrameworkではXMLに関するコードをまったく記述しなくても、Web Serviceを実装でき、またそれを呼び出すプログラムを作成することができる。ここではコマンドラインから行ったが、Visual Studio.NETでは、こうした作業をすべてグラフィカル・ユーザー・インターフェイスで行うことができる。

 さて、このコードでは、3行目にMathServiceクラスのオブジェクトを作成しているが、このクラスはWeb Serviceで公開したMathServiceクラスと同名の、先ほどのWebServiceUtil.exeによって作成された「プロキシ・クラス」と呼ばれるものである。このプロキシ・クラスはWeb Serviceと、それを呼び出しているユーザーのコードの橋渡しを行うものだ。このプロキシ・クラスによって、サーバ上にあるWeb Serviceのメソッドを通常のクラスのメソッドとまったく同様に処理することができるようになっている。このプロキシ・クラスについてもう少し解説しておこう。

 まず、Web Serviceをプログラムから呼び出すためには、そのサービスのメソッドやパラメータの型情報をXMLで記述した「SDL(Service Description Language)ファイル」が必要となる。Web Serviceはプログラムから呼び出すものなので、そのWeb Serviceの呼び出し手順や、必要なパラメータはあらかじめ明確化しておかなければならないからだ。

 このSDLファイルは、URLに「?SDL」というパラメータを付けて呼び出すことによって得ることができる(SDLファイルの内容は膨大なので、ここでは紹介を割愛させていただく)。

 この情報を解析し、Web Serviceで定義されているクラスとメソッドと同じインターフェイスを提供し、実際にWeb Serviceと通信を行う代理人がプロキシ・クラスである。

 なおSDLは、将来的にはWSDL(Web Services Description Language)に置き換えられる予定である。このWSDLをサービスを記述する標準仕様にしようと、現在、MicrosoftやIBM、Aribaなどの企業が協力して標準化を進めている。

 以上、.NET Frameworkの機能を駆け足で見てきたが、いかがだっただろうか。プログラマにとっては、これまでのWindowsでのプログラム開発のノウハウがまったく通用しなくなってしまうと感じたかもしれない。残念ながら、学ぶことは少なくない。しかし新しく学ぶべきものは統一されていて、非常に洗練されている感じる。

 .NETテクノロジのOSへの標準実装などを含め、.NET構想全体が実現されるのは5年先とも言われているが、そのインフラとなる.NET Frameworkはすでに「.NET Framework SDK」として誰でも無償で入手可能である(マイクロソフトのダウンロード・ページ)。これにはここで解説したCLRやクラス・ライブラリ、C#やVBのコンパイラ(コマンドライン)、クラス・ライブラリのリファレンス、数多くのチュートリアルとサンプル・プログラムなどが含まれている。興味を持った方は、さっそくインストールして試してみていただきたい。End of Article

関連リンク
マイクロソフトのダウンロード・ページ
 
 

 INDEX
  [特集].NET Framework入門
    1.Microsoft.NETプラットフォームとWeb Service
    2..NETプラットフォームと.NET Framework
    3.Common Language Runtime(1)
   CLRの内部構造とプログラム実行の流れ
    4.Common Language Runtime(2)
   CLRによる複数言語サポート:
    VS.NETで標準サポートされる言語処理系
    5.Common Language Runtime(3)
   CLRによる複数言語サポート:
   サードパーティによってサポートが予定されている言語処理系
    6.ASP.NET(1)
    ASP.NETで何が変わるのか? まずは既存のASPと比較してみよう
    7.ASP.NET(2)
    VBライクなWebアプリケーション開発を可能にするASP.NETのサーバ・コントロール群
  8.ASP.NET(3)
    Web Service開発始めの一歩。サービス公開に必要なのはキーワード指定1つ 


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 記事ランキング

本日 月間