特集:クライアントステート管理、3つの手法Visual Studio Magazine(1/9 ページ)

ASP.NET上でクライアント状態管理に用いる「セッション状態」「ビューステート」「クッキー」。この特集では、3つそれぞれにおける実践的なテクニックを解説する。

» 2004年12月28日 10時30分 公開
[Matthew Gibbs, Rob Howard,FTPOnline]

 Visual Studio Magazine誌は、米国で同種のVS専門誌ナンバーワンの発行部数を誇る。ITmediaでは、発行元FTP Onlineから翻訳権を取得。米国発でホットな話題をピックアップし、月に2テーマの特集を掲載中。ほかのテーマによるバックナンバーは、以下のリンク先「dev .NET」から参照が可能だ。

理解に前提となるテクノロジー:VB.NET、C#、SQL Server 2000、ASP.NET

 この記事は、Matthew Gibbs氏とRob Howard氏の書籍「Microsoft ASP.NET Coding Strategies with the Microsoft ASP.NET Team」(Microsoft Press)の第5章から抜粋したものだ。記事として相応しいように編集されている。なお、該当章の全文もPDFで配布されている(ただし、FTP Onlineサイトからの英語版)[原文FTP Online編集者注釈]。


 クライアントステートがどのように動作し、アプリケーションでどのように利用されるかの理解は、うまく動作して良い設計を行うために重要なことだ。

 この特集では、クライアントステートを管理する「セッション状態」(session state)、「ビューステート」(view state)、「クッキー情報」(cookies)の3つのテクニックについて考察していく。クライアントステートのもっとも一般的な形態は、「セッション状態」だ。ASP.NETのセッションはフリースレッドと言えばよいだろう。しかしある場面では、同期的にアクセスしなければならないこともある。

 ASP.NETのセッション状態は、SessionIDを管理するためにクッキー情報を利用する。しかしクッキー情報の利用が望ましくない時には、URLにSessionIDを含めてしまうこともできる。またASP.NETのセッション状態は、Webサーバファームへの配備を容易にするために、「State Serverモード(StateServer)」と「SQL Serverモード(SQLServer)」という2つのアウトプロセスモードもサポートしている(訳注:Webサーバファームとは、複数のWebサーバで構成して負荷分散構成にすること)。

 ASP.NETでは、標準で「インプロセス(InProc)モード」で動作する。

 この動作モードの場合セッション状態に保存される値は、シリアライズのサポートが要求されない。そして値は、ASP.NETのワーカープロセスのメモリ領域に保存されるのだ(訳註:シリアライズ(serialize)とは、値を連続化してひとつの長いバイナリ値、または文字列に変換する操作のこと)。

 この動作の振る舞いは、ASPがセッションにデータを格納するのと同じだ。しかし、データがIISのプロセスに保存されるのではなく、ASP.NETのワーカープロセス内で管理されたメモリに保存されるという点が異なる。

 インプロセスにデータが格納される場合、プロセスがリサイクルされるたびに、セッション状態が失われる。

 Windows Server 2003上のIIS 6では、29時間ごとにワーカープロセスが自動リサイクルされる。ただし、この値は標準値であり、構成変更することも可能だ。しかしいずれにせよ、それが午前2時や3時であれ、セッションのデータは29時間ごとに失われてしまうことを意味する。

 インプロセスモードは、セッション状態を利用するもっとも高速な方法だ。

 インプロセスモードでは、(クライアントと密接に結びつけない限り)Webサーバファームでの利用がサポートされない(訳注:「クライアントと密接に結びつけない限り」とは、何らかの方法でクライアントとWebサーバとを1対1で対応させない限りという意味。複数のWebサーバでWebサーバフォームを構成する場合、「クライアントが次に接続してきた時にも、前回と同じWebサーバに接続させるようにすれば」というのが、「クライアントを密接に結びつけない限り」という主旨である)。

 しかし、アウトプロセスモードで懸念されるシリアライズやデシリアライズのオーバーヘッドがない(訳注:デシリアライズとは、シリアライズしたものを元の値に戻す操作のこと)。

 アウトプロセスモードは、インプロセスモードに比べて、15〜30%遅いと思っても間違いないだろう(ネットワーク速度やオブジェクト自身の大きさ、そしてシリアライズされた場合の大きさにも依存する)。単一のサーバで構成している場合には、インプロセスモードを利用するとよい。

 IIS 6では、前述したように29時間ごとのデータ損失を回避するために、アウトプロセスモードを利用することも、プロセスの再利用を禁止する方法もとれる(訳注:リサイクル設定を変更するためには、インターネットサービスマネージャから、アプリケーションプールのプロパティ画面を表示させる)。

 machine.configファイルによる構成設定のうち、セッション状態の標準設定を指定する部分を次ページに示す。

       1|2|3|4|5|6|7|8|9 次のページへ

© Copyright 2001-2005 Fawcette Technical Publications

注目のテーマ