祥寛2004/07/16ASP.NETにおけるセッション情報は、デフォルトでIISサーバのメモリ内に管理される。セッション情報にあまりに巨大なデータを持たせてしまうと、サーバ・マシンのメモリが逼迫(ひっぱく)する原因にもなり得るということだ。ASP.NETでアプリケーションを構築する場合には、原則、大量のデータはデータベース・サーバなどに永続化するべきであり、セッション情報にはあくまで限られた少量のデータ、または、データベース・サーバにアクセスするためのキーとなる情報のみを保持するのが好ましい。いえ、アプリケーションの構造によっては、やむを得ず、対象となるデータが大きくなることはある。そもそも利用するユーザー数が増えてくれば、セッション情報が必要とするメモリ量が増えてくるのは否めないだろう。そこで、ASP.NETは、セッション情報の多寡がアプリケーションのパフォーマンスの良しあしに直結しないように、ASP.NETとは別のプロセス(または、別のサーバ・マシン上のプロセス)で管理するための手段を提供している。Serviceとは、ASP.NETのセッション管理だけを担うサービスである。これは、従来、IISサーバ内のプロセスで管理されていたセッション管理を専用プロセスに委ねるサービスだ。これにより、以下のようなメリットを得ることができる。(1)Webサーバへのメモリ負荷を分散できるWebサーバとセッション管理サーバを分離できるので、セッション・データの増大がそのままアプリケーションのパフォーマンスを左右することはない。1つのセッション管理サーバで複数のWebサーバを管理しているような場合、ユーザー数が増えても、セッション管理サーバのメモリのみを増設すればよい(つまり、個々のWebサーバのメモリは増設しなくてもよい)ので、より効率的なハードウェア投資が可能となるだろう。(2)アプリケーションの再起動時にもセッションを維持できるASP.NETでは、以下のような条件下でaspnet_wp.exe、またはWebアプリケーション用のアプリケーション・ドメインは再起動される。global.asax、web.configが更新された場合web.configの<processModel>要素などでプロセスの再起動条件として、requestLimitやmemoryLimitなどの属性値を指定しており、かつ、現在の状態がその条件に合致した場合/binフォルダ内のアセンブリを更新した場合また、本来あってはならないことではあるが、アプリケーションの障害などで、運用中にWebサーバを再起動するというようなケースもあり得ない話ではない。以上のような場合には、IISプロセスで管理されたセッション情報は破棄されてしまうが、別プロセスでセッション情報を管理していれば、このような心配もない。Webサーバの状態によらず、セッション情報を保持することができる。大規模なアプリケーションを構築する場合、負荷分散のためにWebサーバをクラスタ構成にするというケースはよくあることだ。従来のIISプロセスによるセッション管理では、異なるWebサーバ間でセッション情報を共有することができなかった。同一ユーザーからのアクセスは必ず同一のWebサーバで処理しなければならず、必ずしも適切な負荷分散を実現できなかった。セッション情報を専用のサービスに委ねることで、セッション情報自体は必ず唯一のサーバが管理するので、こうした問題を意識する必要はない。Serviceモードは、必ずしもメリットばかりでないことにも留意してほしい。いうのも、セッション情報が別プロセスで管理されているということは、セッション・データへの参照/設定に当たって、必ず「外部プロセスへのアクセス」が発生するということになるからだ。この行為は、同一プロセス内へのアクセスに比べると、はるかにオーバーヘッドが大きい。Serviceを利用するべきではない。Serviceを利用するための手順を、以下に示しておこう。Serviceを利用する方法はごくシンプルだ。パネル]−[管理ツール]−[サービス]から行う。Service]を右クリックし、表示されたコンテキスト・メニューから[開始]をクリックする。Service]を右クリックし、表示されたコンテキスト・メニューから[開始]をクリックする。Service]のプロパティ・シートから[スタートアップの種類]の項を[自動]とすればよい。Serviceは自動起動する。Serviceのプロパティ・シートサービスを自動起動させる場合には、[スタートアップの種類]の項を[自動]とすればよい。Serviceのサービスが起動しているサーバを指定する必要がある。これには、web.configの<sessionState>要素を以下のように設定する。<sessionState>要素は、仮想ディレクトリ直下のweb.configでしか設定できない点に注意すること。Serviceを利用する場合は"StateServer"を指定する。Serviceが起動しているマシンへの接続文字列を指定する。ここでは、仮にWebサーバと同一のマシン上でサービスが稼働しているものと仮定して「127.0.0.1」を指定しているが、この個所は適宜、読者諸兄の環境に合わせて変更してほしい。Serviceサーバへの接続タイムアウト時間を秒単位で指定する。Serviceサーバの負荷状態が高い場合などには、この値を大きめに設定しておくことで、接続タイムアウトの確率を低くすることができる。Serviceを利用するための準備は完了だ。Serviceが正常に動作していることを確認するには、タスク・マネージャから各プロセスのメモリ使用量を確認してみればよい。大量のセッション・データをアプリケーションからセットした場合に、aspnet_state.exeのメモリ使用量が増えていることが確認できるはずだ。Serverモード)のような外部プロセスによるセッション管理を利用した場合、Global.asaxによるSession_OnEndイベントは利用できないので、注意すること。Session_OnEndイベントによるセッションの状態監視が利用できるのは、セッションをインプロセスで管理している場合(デフォルトの状態)に限られる。より自動抽出したものです。7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。TranslatorはPowerPoint用のアドイン。