.NET TIPS

[ASP.NET]セッション情報をSQL Server上で管理するには?

山田 祥寛
2004/07/23

 別稿「TIPS:[ASP.NET]セッション情報を外部プロセスで管理するには?」では、ASP.NET State Service(以下、「State Service」)を利用して、IISサーバ・プロセスからセッション管理を分離する方法について紹介した。セッション管理をASP.NETアプリケーションから分離することで、メモリ負荷の分散などの効果を得ることができる。

 しかし、State Serviceを使用した場合でも、標準的なインプロセス・モードと同様、メモリ上でセッション・データを管理していることに変わりはない。つまり、DataSetオブジェクトのような大量のデータをセッション情報として管理しようとした場合には、State Serviceサーバに大量のメモリが必要となる可能性が出てくる。

 このような場合に備えて、ASP.NETが標準で提供しているのが、SQL Server(MSDEも可)によるセッション管理だ。このSQL Serverモードによるセッション管理では、セッション情報をメモリ上ではなく、SQL Serverのテーブル上に保存するため、セッション情報が増大してもメモリ負荷は増大しない。

 SQL Serverモードを利用するための手順は、以下のとおりだ。

1. SQL Server上にセッション管理用のデータベースを構築する

 SQL Serverモードを利用するに当たっては、セッション保存用のテーブルやセッション情報操作用のストアドプロシージャを含む専用データベースを、SQL Server上にあらかじめ用意しておく必要がある。

 もっとも、データベース生成用のスクリプトはあらかじめ.NET Frameworkが提供しているので、準備の手順はさほど難しくはない。「<Windowsルート>\Microsoft.NET\Framework\<バージョン番号>」フォルダの配下に用意されているInstallSqlState.sqlをコマンドライン・ツールosql.exeを使って実行すればよい。

 まずは、コマンド・プロンプトでosql.exeを起動してみよう。InstallSqlState.sqlを実行するには、データベース作成権限を持つ管理者ユーザー(SQL Server認証が有効な場合は「sa」でよい)でログインする必要がある。また、あらかじめSQL Serverのサービスを起動しておくこと。

> osql -U sa
パスワード : **(環境に合わせて、パスワードを入力)
1>
コマンドライン・ツールosql.exeによるSQL Serverへの接続
データベース作成権限を持つ管理者ユーザー(この例では「sa」)で、SQL Serverへログインしている。

 osqlのプロンプト「1>」が表示されたら、InstallSqlState.sqlの中身をコマンド・プロンプトにコピー&ペーストするだけだ。一連のSQL命令が実行され、SQL Server上にセッション管理用の2つのデータベース「ASPState」「tempdb」が構築される。

 生成されたデータベース内容の確認は、MSDEのようにGUIのデータベース管理ツールがない場合には、Microsoft Access上から行うとよい。AccessからSQL Server(MSDE)に接続する手続きについては、別稿「Windows TIPS:AccessをMSDEのフロントエンドとして利用する」にて紹介しているので、併せて参照してほしい。

 次の画面はAccessを使ってデータベース内容を確認しているところである。tempdbデータベースにはセッション格納用のテーブルが、ASPStateデータベースにはセッション操作用のストアドプロシージャが生成されているのが確認できるはずだ。

tempdbデータベース
tempdbデータベースにはセッション格納用のテーブルが生成されている。
 
ASPStateデータベース
ASPStateデータベースにはセッション操作用のストアドプロシージャが生成されている。

 なお、もしもセッション管理用のデータベースを破棄したい場合には、InstallSqlState.sqlが格納されていたのと同じフォルダに用意されているUninstallSqlState.sqlを利用することができる。実行手順については、上の手順とまったく同様だ。

2. SQL Serverを有効にする

 ASP.NETのセッション管理にSQL Serverを利用可能にするためには、web.configの<sessionState>要素を以下のように設定する必要がある。なお、<sessionState>要素は、仮想ディレクトリ直下のweb.configでしか設定できない点に注意すること。

<?xml version="1.0" encoding="UTF-8" ?>
<configuration>
  <system.web>
    <sessionState mode="SQLServer"
      sqlConnectionString="Data Source=(local);user id=sa;password=sa" />
  </system.web>
</configuration>
SQL ServerでASP.NETのセッション管理を行うための設定(web.config)

 mode属性の値は、SQL Serverを利用する場合は固定値「SQLServer」だ。sqlConnectionString属性には、SQL Serverが起動しているマシンへの接続文字列を指定する。ここでは、Webサーバと同一のマシン上でSQL Serverが稼働しているものと仮定して「(local)」を指定しているが、この個所は適宜、読者諸兄の環境に合わせて変更してほしい。

 以上で、SQL Serverによるセッション管理を利用するための準備は完了だ。SQL Serverモードが正常に動作していることは、先ほど設定したAccessプロジェクト上から確認することができる。任意のWebフォームからセッション情報をセットした場合に、tempdbデータベースのASPStateTempSessionsテーブルにセッションに関する一連の構成情報が格納されているのが確認できるはずだ。

ASPStateTempApplicationsテーブルとASPStateTempSessionsテーブル
セッションID、作成時刻、有効期限、セッション情報本体など一連のセッション情報が格納される。

 なお、別稿「TIPS:[ASP.NET]セッション情報を外部プロセスで管理するには?」でも紹介したように、SQL ServerやState Serviceによるセッション管理は、IISプロセス内でのセッション管理に比べるとオーバーヘッドが大きい。負荷の大小といった意味では、「インプロセス<State Service<SQL Server」という図式が成り立つものと思ってよい。無条件にState ServiceやSQL Serverのような手段を利用するのではなく、それぞれのメリットとデメリットを考慮したうえで適切なセッション管理手法を選択するようにしたい。End of Article

カテゴリ:Webフォーム 処理対象:セッション管理
使用キーワード:<sessionState>要素
関連TIPS:[ASP.NET]セッション情報を外部プロセスで管理するには?
関連TIPS(Windows):AccessをMSDEのフロントエンドとして利用する
 
この記事と関連性の高い別の.NET TIPS
[ASP.NET]SQL Serverモードのセッション管理で情報を永続化するには?
[ASP.NET]セッション情報を外部プロセスで管理するには?
SQL Server 2005でネットワーク接続を有効にするには?
手軽にSQL Serverのデータベースをコピーするには?
[ASP.NET]Express Edition以外のSQL Serverでフォーム認証を利用するには?
このリストは、(株)デジタルアドバンテージが開発した
自動関連記事探索システム Jigsaw(ジグソー) により自動抽出したものです。
generated by

「.NET TIPS」


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

本日 月間