特集
NetDictionaryで始める
Webサービス・プログラミング

.WebServiceクラスの継承

デジタルアドバンテージ
2001/12/05


 今回、例として作成したwhatstime.asmxで、まだ解説していない項目が1つ残っている。それはWhatsTimeClassクラスが継承しているWebServiceクラス(ネームスペースはSystem.Web.Services)についてだ。このクラスは、ASP .NETが管理するセッションやHTTPリクエストなどのさまざまなオブジェクトにアクセスするためのプロパティを持っている(しかし今回のサンプルではこれらをまったく利用していないため、本当はこのクラスを継承していなくてもよい)。このWebServiceクラスのプロパティの1つである「Applicationオブジェクト」を使用した、非常に簡単な「アクセス・カウンタ」Webサービスを次に示す。

 1: <%@ WebService Language="C#" Class="CounterClass" %>
 2:
 3: using System.Web.Services;
 4:
 5: public class CounterClass: WebService {
 6:   [WebMethod]
 7:   public int Counter() {
 8:     if (Application["counter"] == null) {
 9:       Application["counter"] = 0;
10:     }
11:     Application["counter"] = (int)Application["counter"] + 1;
12:     return (int)Application["counter"];
13:   }
14: }
「アクセス・カウンタ」Webサービス
ハッシュ・テーブルであるApplicationオブジェクトを使用してアクセスされた回数をカウントし、その値を返すWebサービス。

 Applicationオブジェクトは、ある1つのWebサービスにおいて、すべてのアクセスに対して共通して使用することのできるハッシュ・テーブル(引数として与えられたキーに対する値を保持する)である。この例では、“counter”という文字列をキーにして、このWebサービスが呼び出された回数を保存している。Webサービスが最初に起動された場合には“Application["counter"]”の値はnullになっているため、まず0で初期化する。2回目以降のアクセスではこの値を1増やしてから、Webサービスの戻り値として返す。誰がアクセスしても値が1ずつ増えていくのでアクセス・カウンタとして使えるわけだ(ただし排他制御を行っていないので、これだけでは同時アクセスがあった場合にカウントが狂う可能性があるが)。このWebサービスの場合、Applicationオブジェクトの値は、マシンを再起動したり、IISを再起動したりするまで保持される。

 Applicationオブジェクトは、例えば、すべてのクライアントに共通し、かつセットアップに時間のかかるデータを保持するのに便利である。実際NetDictionaryの最初のバージョンでは、検索ごとに見出し語テーブル(見出し語と、それを識別するためのID番号を対にしたテーブル)にアクセスしていたが、すべての見出し語をWebサービスの起動時にデータベースからApplicationオブジェクトに読み込むようにチューンアップした。この辺りの話はまた回を改めてすることにしよう。

 次回は「ADO .NET」によるデータベース処理を解説しながら、今回で解説した内容と組み合わせて、「最初のバージョン」のNetDictionaryサービス・プログラムについてご紹介する予定だ。End of Article 

 

 INDEX
  [特集]NetDictionaryで始めるWebサービス・プログラミング
  第3回 Webサービス・プログラミング始めの一歩
    1.Webサービスを記述するasmxファイル
    2.Codebehindによるコードの分離
    3.[WebMethod]アトリビュートの機能
    4.[WebService]アトリビュートの追加
  5.WebServiceクラスの継承
 
 特集 : NetDictionaryプロジェクト


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

本日 月間