特集
NetDictionaryで始める
Webサービス・プログラミング
5.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サービス・プログラムについてご紹介する予定だ。
Insider.NET 記事ランキング
本日
月間