質問者
レポートのエクスポート時に「ASP.netセッションの有効期限が切れています」のエラーが表示される

質問
-
Asp.Netで、ページ上にReportViewerクラス(Microsoft.Reporting.WebForms.ReportViewer)を使ってReportingServicesのレポートを表示しているアプリケーションがあります。
このアプリケーションでレポートを表示し、エクスポートの操作をした時に下記のエラーが表示される事があります。
一部のクライアントで発生し、発生頻度も不定です。(同じクライアントで正しく動く場合もある)
http://support.microsoft.com/kb/316112/ja にセッションに関する記述がありますが、こちらに該当しないことは確認済みです。
他に原因として考えられるものは無いでしょうか?
[AspNetSessionExpiredException: ASP.NET セッションの有効期限が切れています]
サーバ・クライアントの環境は以下の通りです。
Microsoft.Reporting.WebForms.ReportDataOperation..ctor() +722
Microsoft.Reporting.WebForms.HttpHandler.GetHandler(String operationType) +303
Microsoft.Reporting.WebForms.HttpHandler.ProcessRequest(HttpContext context) +57
System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +599
System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +171OS:Windows2008R2
DB:SQLSERVER2012Std
クライアントブラウザ:IE8
- 移動 星 睦美 2015年7月15日 6:47 SQL Server BI から
すべての返信
-
ReportViewer と Session はもともと何の関係もないはずです。
質問者さんの Web アプリケーションの作り方の問題で、どこかで Session を使うようになっていて(例えば、ReportViewer が使うデータの保存場所に使っているとか)、ユーザーが閲覧しているうちにタイムアウトになってしまったというようなことではないのでしょうか。
今の質問に書いてある情報だけでは、そういう想像ぐらいしか出来ません。
Session をどのように使っているかを詳しく書いてもらえないと、たぶんそれ以上のことは掲示板に書いてある以上のことは知りえない第三者には分からないと思います。
-
【追伸】
どこでどのように Session を使っているのか分からなければ、対症療法的ですが、アプリケーションルートの web.congfig ファイルで、sessionState 要素の timeout 属性(デフォルトで 20 分)を少し長くして様子を見てみてはいかがですか?
sessionState 要素 (ASP.NET 設定スキーマ)
https://msdn.microsoft.com/ja-jp/library/vstudio/h6bb9cz9(v=vs.100).aspx -
"AspNetSessionExpiredException" をキーワードにして検索したところ、英語のMSDN フォーラムのスレッドがありました。
y-ohara さんの事象と同じかどうかわかりませんが、よろしければトラブルシューティングのヒントにご覧いただければと思います。
・Intermittent AspNetSessionExpiredException from ReportViewer 2010/SQL Server 2008: (英語)
フォーラム オペレーター 星 睦美 - MSDN Community Support
-
先のレスで、
> ReportViewer と Session はもともと何の関係もないはずです。
と書きましたけど大間違いでした。すみません。
以下の記事によると、ReportViewer は再生するのが簡単ではないデータを保存するのにセッションを使うとのことです。
Did Your Session Really Expire?
http://blogs.msdn.com/b/brianhartman/archive/2009/02/15/did-your-session-really-expire.aspxそして、ポストバックの際などに期待したデータがセッションにないと AspNetSessionExpiredException をスローするとのことです。
原因として次のことが書かれています:
(1) 本当にセッションがタイムアウトした。(例:ping をかけてタイムアウトにならないようにしているが、サーバーが忙しいとか接続が不安定で失敗した)
(2) 要求を処理しているサーバーにセッションがない。(例:セッションのモードが InProc で、Web Garden / Farm 構成になっているとか、ワーカープロセスがリサイクルされた)
(3) ブラウザがクッキーを受け付けない設定になっている。
上記 (2), (3) が該当しなければ原因は (1) ということでしょうか。
星さんが紹介された記事に ReportViewer.KeepSessionAlive のことが書かれていますが、これがデフォルトの true の場合はセッションがタイムアウトしないように ping がかかるのだそうです。
- 編集済み SurferOnWww 2015年7月16日 10:15 一部訂正
-
> ご提案いただいたSessionStateのTimeOutは別の要件ですでに値を大きくしてあるのですが、
すみません、上のレスを見落としてました。
それで少しも改善がないとすると、原因は上のレスで書いた (1) ではなさそうですね。
(2) に心当たりはないでしょうか?
> (2) 要求を処理しているサーバーにセッションがない。(例:セッションのモードが InProc で、
> Web Garden / Farm 構成になっているとか、ワーカープロセスがリサイクルされた)質問者さんが立てた別スレッドで SQL Server Reporting Services に関する問題がありましたが、このスレッドの話は ReportViewer に間違いないですよね? SQL Server Reporting Services もセッションを使うそうですが、ASP.NET のセッションとは別物だそうです。(なので、timeout を変えても意味はないようです)
関係ないかもしれませんがご参考まで。
Session Timeout during execution
http://blogs.msdn.com/b/jgalla/archive/2006/10/11/session-timeout-during-execution.aspx -
SurferOnWww様:
>(2) に心当たりはないでしょうか?
Web Garden は構成していませんし、ワーカープロセスのリサイクルは毎日夜間におこなう設定になっているのみで、メモリの使用量に応じてリサイクルする設定にはなっていませんでした。
>質問者さんが立てた別スレッドで SQL Server Reporting Services に関する問題がありましたが、
>このスレッドの話は ReportViewer に間違いないですよね?
実際に使用しているアプリケーションはReportViewerを使用したもので、こちらのスレッドに載せているものと同じものです。
参考記事のご紹介ありがとうございます。確かにASP.netのセッション管理とは異なるもののようですね。
レポートの処理に時間がかかりすぎている事もセッションの維持に関係しているようですので、操作履歴なども確認してみます。
- 編集済み y-ohara 2015年7月21日 3:43
-
原因は分かりませんけど、ご参考に、マイクロソフト公式解説書「プログラミング ASP.NET 4」の 17.3.2 章の「セッション状態が失われる理由」に書いてあったことを紹介しておきます。(関係なさそうなことは除く)
(1) リサイクルは周期的ではあるものの、周期の間隔について一般的な見通しを立てることはできない。
(2) 一部のアンチウィルスソフトは、web.config ファイルや Global.asax ファイルに変更されたという印をつけることがある。(結果、セッション状態が失われる)
(3) Bin や App_Code フォルダといった特別なフォルダの内容が更新されたりした場合も同様にセッション状態が失われる。
以前、上記 (2) で悩んだ人がこのフォーラムにもおられました。
セッション情報がシリアル化できるものであれば、その格納場所を InProc ではなく(現在これですよね?)、StateServer または SQLServer という手段を取ってはいかがですか? 原因が分からないので対症療法的ではありますが。詳しくは以下のページを見てください。
セッション状態モード
https://msdn.microsoft.com/ja-jp/library/ms178586(v=vs.100).aspx商用に使うのであれば、InProc モードは論外という意見もあるようですし。
- 編集済み SurferOnWww 2015年7月22日 0:55 ハイパーリンク張り直し