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
Vous devez vous connecter pour publier un commentaire.
J'ai maintenant résolu, en utilisant une page personnalisée dérivée à partir de la page de base de la classe. Je vais maintenant vérifier si la session est nouveau, puis redirige vers la même page, ce qui rechargement d'un rapport à partir de zéro.
J'ai aussi utilisé un script pour garder la session vivant, depuis le visualiseur de rapport n'est pas de faire de lui-même. Mais depuis que je suis satisfait de la session de vérifier, j'ai désactivé.
Le keep-alive-script appelle un gestionnaire http (.ashx fichier) qui touche la session à chaque fois qu'il appelle (je ne sais pas réellement si c'est nécessaire). Ici, il est pour l'enregistrement:
là, vous heureux? 🙂
dois-je enregistrer ce Gestionnaire dans le web.config afin de faire fonctionner le tout?
OriginalL'auteur Niels Ziegler
Avez-vous essayé de limiter le nombre de processus de travail pour 1?
J'ai eu le même problème, et ce qu'il fixe pour moi a été
A) setting a specfic time of day for recycle
(que vous avez déjà) etB) limit worker processes to max of 1 in app pool settings
.OriginalL'auteur VicarInATutu