NetDictionaryで始める Webサービス・プログラミング 1.Webサービスを記述するasmxファイル
デジタルアドバンテージ |
Webサービスのプログラムは、拡張子.asmxを持つ「asmxファイル」に記述する。そして作成したWebサービスを外部からアクセスできるようにするためには、このファイルをWebサーバであるIISを介して公開できるように配置する。具体的には「\Inetpub\wwwroot」ディレクトリ(IISをインストールすれば自動的に作成されるディレクトリ)以下にこのファイルを配置するか、asmxファイルのあるディレクトリをIISの仮想ディレクトリとして設定すればよい。
さて、次のプログラムは現在の時刻を文字列として返すWebサービスのサンプルだ。
|
|
whatstime.asmx | |
asmxファイルに記述したWebサービス。現在の時刻を文字列として返す。 |
このファイル(ファイル名は「whatstime.asmx」)をIISのディレクトリ(例えば「\Inetpub\wwwroot」)にコピーするだけで、1つのWebサービスとなる。次の画面はこのasmxファイルをブラウザで開いたときに表示される参照用ページである(アドレスは「http://localhost/whatstime.asmx」となる)。
Webサービスの参照用ページ |
このページより、ブラウザを介してWebサービスをテストすることができる。 |
この参照用ページによるWebサービスへのアクセスについては、前回の「第2回:Visual Studio .NETで作るWebサービス・クライアント」で詳しく解説しているので参照されたい。
whatstimeプログラムの内容を解説しよう。まず、asmxファイルの最初の行は必ず「@ WebServiceディレクティブ(directive:「指示」の意)」を記述する必要がある。この行は“<% 〜 %>”のブロックで囲まなければならない(この“%”のついた特別なタグは、Webアプリケーションを記述する際、ASP .NETに対してコードの実行を指示する場合に使用するものと同じである。このタグ自体は、従来のASPでも使用していた)。
1: <%@ WebService Language="c#" Class="WhatsTimeClass" %> |
この「@ WebServiceディレクティブ」では、少なくとも“Language”と“Class”の2つの属性と、その属性に対する値を指定する必要がある。このうち「Language属性」では、そのasmxファイルでWebサービスを記述するために使用しているプログラム言語を、一方の「Class属性」ではWebサービスのメソッドを含むクラスをそれぞれ指定する。
Class属性で指定している「WhatsTimeClassクラス」は、2行目以降にC#言語を使用して記述している。1行目の「@ WebMethodディレクティブ」以外の部分は完全にC#のソース・コードとなっているのが分かるだろう。
WhatsTimeClassクラスでは「WhatsTimeメソッド」を定義しており、メソッドの直前に“[WebMethod]”というキーワードを指定している(このキーワードの正体については後述)。このキーワードが付けられたメソッドがWebサービスとして公開される(プログラムとしても、このメソッドを“public”として指定する必要がある)。
6: public class WhatsTimeClass: WebService { |
ここではメソッドを1つだけ定義しているが、もちろん複数のメソッドを定義し、複数のメソッドに[WebMethod]を指定して公開することができる。asmxファイルでは、Class属性で指定されたクラスにあるメソッドのうち、[WebMethod]が付けられたメソッドがWebサービスのメソッドとして公開される。
Webサービスを公開した後、このWebサービスが最初にアクセスされたときに、Language属性で指定した言語のコンパイラによってコードが自動的にコンパイルされ、実行されて、メソッドの戻り値がWebサービスの結果として返される。なお、2度目以降のアクセスでは、テンポラリ・ディレクトリに保存されたコンパイル済みのコードが使用される。
INDEX | ||
[特集]NetDictionaryで始めるWebサービス・プログラミング | ||
第3回 Webサービス・プログラミング始めの一歩 | ||
1.Webサービスを記述するasmxファイル | ||
2.Codebehindによるコードの分離 | ||
3.[WebMethod]アトリビュートの機能 | ||
4.[WebService]アトリビュートの追加 | ||
5.WebServiceクラスの継承 | ||
特集 : NetDictionaryプロジェクト |
- 第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用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
|
|