Comment gérer la visionneuse de rapports session a expiré exception

J'ai la situation suivante:

Microsoft Report Viewer 2010 est utilisée pour afficher des rapports (.rdlc fichiers) en mode local dans un ASP.NET application web. Les données du rapport est fourni par l'affectation d'une source de données dans le code-behind d'une page ASPX. Voici un exemple:

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);
}

Normalement, cela fonctionne très bien, tous les rapports que nous avons des charges de l'amende juste.

Quand je laisse la page ouverte jusqu'à ce que le processus de travail est recyclé, puis essayez d'actualiser le rapport ou de faire toute sorte de publication sur la page de rapport, je reçois un (non gérée) exception "ASP.NET Session a expiré".

Informations sur l'Exception:
Type d'Exception: AspNetSessionExpiredException
Message de l'Exception: Die ASP.NET-Sitzung ist abgelaufen oder konnte nicht gefunden >werden.
chez Microsoft.La production de rapports.WebForms.ViewerDataOperation..ctor()
chez Microsoft.La production de rapports.WebForms.HttpHandler.GetHandler(String operation type.)
chez Microsoft.La production de rapports.WebForms.HttpHandler.ProcessRequest(HttpContext contexte)
au >System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionS>tep.Execute()
au Système.Web.HttpApplication.ExecuteStep(IExecutionStep étape, Boolean& >completedSynchronously)

IIS est configuré pour recycler tous les matins à 5 heures du matin, Nous utilisons la InProc paramètre dans le web.config, donc, de toute évidence, la session est perdue. Si je comprends le ASP.NET comportement correctement, à l'exception non gérée devrait provoquer le processus de travail à terminer. Il devrait y avoir un nouveau processus de travail lors de la prochaine arrivée des demandes.

Si le délai d'expiration de session paramètre est faible, il provoque la même exception. Ce qui semble étrange, car à partir de ce que j'ai lu, le Rapport que le Spectateur doit faire un ping du serveur pour la garder active.

J'ai essayé d'attraper l'exception, mais il est jeté quelque part dans le contrôle ReportViewer, avant d'en arriver à accéder au chargement de la page. Le code ci-dessus est toujours exécuté si je sors de l'IsPostBack, mais il n'a pas d'effet.

J'ai essayé d'utiliser le serveur d'état au lieu de garder la session dans le processus, de sorte qu'il ne serait pas perdre sa session, mais cela conduit à d'autres erreurs à partir de la visionneuse de rapports. Il semblait être incapable de stocker ses données de session dans l'état du serveur.

L'environnement est Windows Server 2003
.NET 4.0
La Visionneuse De Rapports 2010

Où puis-je gérer l'erreur, sans avoir le processus de travail de mettre fin, ou d'obtenir le rapport à l'utilisation stateserver?

OriginalL'auteur Niels Ziegler | 2010-07-29