
前提
複数のWebアプリケーションにおいて、Sessionを共有して動作する環境を構築しています。
表記の通り、SessionStateのStateServer modeを利用しています。
Grid画面からのListファイル出力機能を実装時に以下の問題が発生しました。
実行したいこと
- Grid画面で、Filterをかけた状態で、ファイル出力を行った場合、
Gridと同じFilter条件で絞り込んだ Listをファイルに出力したい。
処理の概要
- 今回、Grid表示とファイル出力の間でFilter条件(Where句)を共有するため、Session変数を利用しています。
画面でFilterをかけた際に Where句をSession変数に保持し、ファイル出力処理では、Session変数からWhere句を読み出して、出力時のQueryに付加します。
発生している問題
- SessionStateを利用する環境では、いったん保存したWhere句のSession変数が、ファイル出力時に Nullになってしまう。
該当のソースコード
※すみません、検証用に記載したLog出力のみ記載します。
設定側
Session["where"] = WhereQuery; Session["order"] = OrderByQuery; Logger.Info("XXXController.GetData()... WhereQuery ='" + Session["where"].ToString() + "' : OrderByQuery ='" + Session["order"].ToString() + "'"); Logger.Info("XXXController.GetData()... SessionID : " + Session.SessionID);
取得側
if (Session["where"] == null) { Logger.Info("XXXController.ExportData()... QueryInfo is Null!!"); Logger.Info("XXXController.ExportData()... SessionID : " + Session.SessionID); } else { Logger.Info("XXXController.ExportData()... WhereQuery ='" + Session["where"].ToString() + " : OrderByQuery ='" + Session["order"].ToString() + "'"); Logger.Info("XXXController.ExportData()... SessionID : " + Session.SessionID); }
試したこと
InProcのDebug環境では、Nullにはならず、期待通りに動作します。
Logを埋め込み、確認しましたが、Setする側では、正しくSession保持していますが、利用する側では、Nullになってしまいます。
いろいろWeb検索もしましたが、むしろInProcではSessionが消えやすいとい情報はあるが、StateServerを利用すると消えるという情報は見つかりませんでした。
また、Sessionごと切れるのではなく、一部の変数のみが消えます。
(Login情報もSessionに保持していますが、こちらは健在です)
類似の事象、原因と思われる処理などなにかご存知の方、アドバイスお願いします。
補足情報(FW/ツールのバージョンなど)
- 環境: Visual Studio 2015, .NET Framework 4.6.1 ASP.NET MVC
- 言語:C#
- IIS 7.5


回答2件
あなたの回答
tips
プレビュー