У меня такая ситуация:
Microsoft Report Viewer 2010 используется для отображения отчетов (файлов .rdlc) в локальном режиме в веб-приложении ASP.NET. Данные отчета предоставляются путем назначения источника данных в коде страницы ASPX. Вот пример:
if(!IsPostBack){
ReportViewer1.Reset();
ReportDataSource reportDataSource = new ReportDataSource();
reportDataSource.Name = "DataContainerType";
reportDataSource.Value = DatasourceOnPage;
reportDataSource.DataSourceId = "DatasourceOnPageID";
reportDataSource.DataMember = "DataSourceView";
ReportViewer1.ProcessingMode = ProcessingMode.Local;
ReportViewer1.LocalReport.DisplayName = "ReportName";
ReportViewer1.LocalReport.ReportEmbeddedResource = "Reportfile.rdlc";
ReportViewer1.LocalReport.DataSources.Add(reportDataSource);
}
Обычно это отлично работает, каждый отчет у нас загружен просто отлично.
Когда я оставляю страницу открытой до перезапуска рабочего процесса, а затем пытаюсь обновить отчет или выполнить какую-либо обратную передачу на странице отчета, я получаю (необработанное) исключение «Срок действия сеанса ASP.NET истек». сильный>
Информация об исключении: Тип исключения: AspNetSessionExpiredException Сообщение об исключении: Die ASP.NET-Sitzung ist abgelaufen oder konnte nicht gefunden> werden. в Microsoft.Reporting.WebForms.ViewerDataOperation..ctor () в Microsoft.Reporting.WebForms.HttpHandler.GetHandler (String operationType) в Microsoft.Reporting.WebForms.HttpHandler.ProcessRequest (контекст HttpContext) в> System.WebFormation.HcallApp .System.Web.HttpApplication.IExecutionS> tep.Execute () в System.Web.HttpApplication.ExecuteStep (шаг IExecutionStep, логическое значение &> завершено синхронно)
IIS настроен на повторное использование каждое утро в 5 часов утра. Мы используем параметр InProc в файле web.config, поэтому очевидно, что сеанс будет потерян. Если я правильно понимаю поведение ASP.NET, необработанное исключение должно привести к завершению рабочего процесса. Когда поступит следующий запрос, должен появиться новый рабочий процесс.
Если значение тайм-аута сеанса низкое, возникает то же исключение. Это кажется странным, потому что из того, что я прочитал, средство просмотра отчетов должно проверить связь с сервером, чтобы поддерживать сеанс.
Я попытался перехватить исключение, но оно возникло где-то внутри элемента управления ReportViewer, прежде чем я смогу получить к нему доступ при загрузке страницы. Приведенный выше код все еще выполняется, если я извлекаю IsPostBack, но это не имеет никакого эффекта.
Я попытался использовать сервер состояний вместо сохранения сеанса в процессе, чтобы он не потерял сеанс, но это приводит к другим ошибкам в средстве просмотра отчетов. Казалось, что не удалось сохранить данные сеанса на сервере состояний.
Среда - Windows Server 2003 .NET 4.0 Report Viewer 2010.
Где я могу обработать ошибку без завершения рабочего процесса или получить отчет для использования сервера состояний?