私は c# MVC 4 を使用しており、レポート ビューアー aspx ページを埋め込んで、SSRS からレポートを表示しています。Sql Server 2008R2、Microsoft.ReportViewer.WebForms バージョン 11.0 を使用しています。
まず私が直面している問題は、
プロジェクト内でセッション変数を使用して、サイトに関連する値を保持しています。これらは、SSRS とは何の関係もありません (UserId など)。
私が持っているweb.configで
注: このテスト シナリオでは、タイムアウトが非常に高く設定されています。
同様に、キー SessionTimeout の ReportServer データベースの ConfigurationInfo を 60 に更新しました (これも、テストするにはばかげた値です)。
私のReportViewerコードは次のとおりです。
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
ReportViewer1.Reset();
string Reportpath = Request["ReportName"];
string ServerUserName = ConfigurationManager.AppSettings["ReportServerUser"];
string ServerPassword = ConfigurationManager.AppSettings["ReportServerPwd"];
string ReportServerDomain = ConfigurationManager.AppSettings["ReportServerDomain"];
string ReportsPath = ConfigurationManager.AppSettings["ReportsPath"];
ReportViewer1.ProcessingMode = ProcessingMode.Remote;
// Get report path from configuration file
ReportViewer1.ServerReport.ReportServerUrl = new Uri(ConfigurationManager.AppSettings["ReportServer"]);
ReportViewer1.ServerReport.ReportPath = String.Format(ReportsPath + "/" + Reportpath);
IReportServerCredentials irsc = new CustomReportCredentials(ServerUserName, ServerPassword, ReportServerDomain);
ReportViewer1.ServerReport.ReportServerCredentials = irsc;
ReportViewer1.ShowPrintButton = false;
#region Parameters for report
Microsoft.Reporting.WebForms.ReportParameter[] reportParameterCollection = new Microsoft.Reporting.WebForms.ReportParameter[1];
reportParameterCollection[0] = new Microsoft.Reporting.WebForms.ReportParameter();
reportParameterCollection[0].Name = "Example";
reportParameterCollection[0].Values.Add("Example");
ReportViewer1.ServerReport.SetParameters(reportParameterCollection);
#endregion Parameters for report
ReportViewer1.ServerReport.Refresh();
}
}
私が直面している問題
ログインすると、セッションに値が設定されます。レポートを開くと、レポートは 1 秒以内に正常に実行され、ページに表示されます。
舞台裏で、レポート サーバーの一時 DB に行が挿入され、有効期限が 1 分後に設定されていることに気付きました (私の設定による)。
セッションキーが私の
HttpContext.Current.Session.Keys
この時点で問題なく、レポート ページを閉じます。
この時点で、ReportServerTempDB でセッションが期限切れになるまで 1 分待ちます。
次に、値として HttpContext.Current.Session を使用するアクションのページに移動します。繰り返しますが、このアクションはレポートとは関係ありません。ただし、キーを取得しようとすると、次のエラーが発生します
Microsoft.Reporting.WebForms.ReportServerException: The report execution <key> has expired or cannot be found. (rsExecutionNotFound)
私はこれをグーグルで検索しましたが、実行が完了する前にレポートセッションがタイムアウトした長時間実行レポートでほとんどの人がこれを経験しているように見えるため、私の問題に対する有効な解決策は見つかりませんでした。
何か案は?
さらに情報が必要な場合はコメントしてください。質問を更新します。
前もって感謝します