Wie behandeln Berichts-viewer-Sitzung abgelaufen Ausnahme
Ich habe die folgende situation:
Microsoft Report Viewer 2010 ist zum anzeigen von berichten verwendet (.rdlc-Dateien) im lokalen Modus in einem ASP.NET web-Anwendung. Die report-Daten lieferte durch die Zuordnung einer datasource im CodeBehind einer ASPX-Seite. Hier ist ein Beispiel:
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);
}
Normalerweise sind das die großen Werke, jeder Bericht, den wir haben, lädt einwandfrei.
, Wenn ich die Seite geöffnet, bis der Arbeitsprozess recycelt, dann versuchen, den Bericht aktualisieren oder zu tun, jede Art von postback auf der Bericht-Seite, erhalte ich eine (nicht behandelte) Ausnahme "ASP.NET Sitzung ist abgelaufen".
Informationen zur Ausnahme:
Der Ausnahme-Typ: AspNetSessionExpiredException
Exception message: Die ASP.NET-Sitzung ist abgelaufen oder konnte nicht gefunden >werden.
bei Microsoft.Die Berichterstattung.WebForms.ViewerDataOperation..ctor()
bei Microsoft.Die Berichterstattung.WebForms.HttpHandler.GetHandler(String operationType)
bei Microsoft.Die Berichterstattung.WebForms.HttpHandler.ProcessRequest(HttpContext context)
bei >System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionS>tep.Execute()
System.Web.HttpApplication.ExecuteStep(IExecutionStep Schritt, Boolean& >completedSynchronously)
IIS festgelegt ist, zu recyceln jeden morgen um 5 Uhr auf, Wir nutzen die InProc-Einstellung in der web.config, so offensichtlich, dass die session verloren. Wenn ich das verstehen ASP.NET Verhalten richtig, die unbehandelte Ausnahme sollte dazu führen, dass der worker-Prozess zu beenden. Es sollte eine neue worker-Prozess, wenn die nächste Anfrage kommt.
Wenn der session-timeout-Einstellung niedrig ist, verursacht es die gleiche Ausnahme. Dies scheint seltsam, weil von dem, was ich gelesen habe, das Berichts-Viewer sollte die ping-server zu halten, die Sitzung lebendig.
Ich habe versucht, um die Ausnahme zu fangen, aber es wird geworfen, irgendwo in den ReportViewer-Steuerelement, bevor ich wieder Zugang in die Seite laden. Der obige code wird trotzdem ausgeführt, wenn ich mit der IsPostBack, aber es hat keine Wirkung.
Ich habe versucht, mit state-server anstatt zu halten, die Sitzung in den Prozess, so dass es nicht verlieren würde, es ist session, aber das führt zu weiteren Fehlern aus dem Bericht-viewer. Es schien nicht in der Lage sein, um es zu speichern der session-Daten in der state-server.
Die Umgebung ist Windows Server 2003
.NET 4.0
Report Viewer 2010
Wo kann ich entweder den Fehler behandeln, ohne den Arbeitsprozess zu beenden, oder zu erhalten den Bericht "stateserver"?
InformationsquelleAutor Niels Ziegler | 2010-07-29
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich jetzt gelöst, indem mithilfe einer benutzerdefinierten Seite, die von der Basis-Seite-Klasse. Ich jetzt überprüfen, ob die session neu ist, dann redirect auf die gleiche Seite, wodurch ein Neuladen der Bericht von Grund auf neu.
Ich habe auch ein Skript zu halten, die session am Leben, da der Berichts-viewer ist dies nicht zu tun, von selbst. Aber da bin ich zufrieden mit der session zu überprüfen, habe ich es deaktiviert.
Den keep-alive-Skript ruft eine http-handler (.ashx-Datei), berührt die Sitzung jedes mal, wenn es heißt (nicht sicher, wenn dies notwendig ist). Hier ist es für den Datensatz:
es, Sie glücklich? 🙂
sollte ich mich dieser Handler in web.config, um damit alles funktioniert?
InformationsquelleAutor Niels Ziegler
Haben Sie versucht, die Begrenzung der Anzahl der worker-Prozesse 1?
Ich hatte das gleiche Problem, und was für Feste es war für mich
A) setting a specfic time of day for recycle
(die Sie schon haben) undB) limit worker processes to max of 1 in app pool settings
.InformationsquelleAutor VicarInATutu