2008-10-07 11 views
19

Le projet est ASP.NET 2.0, je n'ai jamais été capable de reproduire cela moi-même, mais je reçois des courriels m'informant que cela arrive aux clients plusieurs fois par semaine, souvent quelques fois de suite.Microsoft ReportViewer: erreurs de session expirées

Voici l'erreur complète:

Exception Détails:

Microsoft.Reporting.WebForms.AspNetSessionExpiredException: ASP.NET session has expired

Stack Trace:

[AspNetSessionExpiredException: ASP.NET session has expired] at Microsoft.Reporting.WebForms.ReportDataOperation..ctor() at Microsoft.Reporting.WebForms.HttpHandler.GetHandler() at Microsoft.Reporting.WebForms.HttpHandler.ProcessRequest(HttpContext context) at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) Session Objects:75de8e1d65ff40d1ba666d940af5b118: Microsoft.Reporting.WebForms.ReportHierarchy 5210064be1fa4d6abf5dd5e56b262974: Microsoft.Reporting.WebForms.ReportHierarchy

Répondre

11

Nous avons eu le même problème. Jusqu'à présent, nous ne l'avons trouvé que lorsque la session a expiré, mais ils ont utilisé le bouton de retour dans un navigateur qui effectue une mise en cache agressive, ce qui est bien. Mais le ReportViewer a essayé de l'actualiser même si la page principale ne l'a pas fait. Ainsi, nous venons d'ajouter une gestion des erreurs hacky Global.asax:

protected void Application_Error(object sender, EventArgs e) 
{ 
    Exception exc = Server.GetLastError().GetBaseException(); 
    if (exc is Microsoft.Reporting.WebForms.AspNetSessionExpiredException) 
    { 
     Server.ClearError(); 
     Response.Redirect(FormsAuthentication.LoginUrl + "?ReturnUrl=" + HttpUtility.UrlEncode(Request.Url.PathAndQuery), true); 
    } 
} 
+0

J'ai essayé ce code dans l'application asp.net mvc 2. mais cette méthode n'a pas été appelée. – loviji

+0

@loviji: Comment utilisez-vous un ReportViewer dans MVC? C'est un contrôle WebForms ... Quoi qu'il en soit, l'erreur Application_Error dans Global.asax devrait fonctionner pour tous les sites ASP.Net. Rechercher comment utiliser correctement et configurer la méthode Application_Error spéciale dans ASP.NET - il y a beaucoup d'aide sur le web pour savoir comment faire. –

+0

merci cela a aidé à résoudre mon problème –

0

Quelle est la question? La session a expiré et ils ne peuvent pas continuer.

Vérifiez la vitesse de traitement du rapport. Construire une sorte de benchmark ou simplement leur demander de mesurer le traitement du rapport.

Facilement peut être que cela fonctionne pour vous, mais pas pour eux (réseau plus lent, plus de données à gérer, serveur DB plus lent, et ainsi de suite).

Edit:Here is autre explanaition et peut-être une solution pour le problème, mais je ne recommande pas de définir le nombre de processus de travail à 1 sur un environnement procudtion.

3

session Délai d'attente

Cela peut être dû à votre délai d'attente de la session étant trop faible. Consultez la section "sessionState" de votre Web.Config, par ex. : -

<system.web><sessionState mode="InProc" timeout="60" /></system.web> 

Qui définirait un délai d'attente de session de 60 minutes.

application Piscine Recyclage

Une autre cause possible, et que nous avons couru dans, est que votre pool d'applications est recyclé pour une raison quelconque. Dans le cas contraire, c'était parce que nous utilisions un paramètre de "Mémoire virtuelle maximale", je l'ai simplement augmenté et tout s'est bien passé depuis. Jetez un coup d'œil dans votre journal des événements système pour les événements 1010, 1011, 1074, 1077, 1078, 1079, 1080 et 1117 de W3SVC et vérifiez si votre pool d'applications est en cours de recyclage et si oui, expliquez pourquoi.

2

Voici ma solution. juste pour ce rapport

exécutant IIS sur une batterie de serveurs Web, et chaque ferme a un compte de jardin web = 3 chacun,

J'ai simplement fait une piscine séparée d'application uniquement pour les rapports sql et définir ce compte gardern web = 1 bassin.

puis, a fait un répertoire virtuel dans IIS et un projet séparé pour les rapports - en utilisant ce pool de rapports

problème

résolu.

0

web gardern count=1 Works pour moi

1

J'ai eu ce problème lors de l'élaboration de mon propre PC et n'a pas pu trouver une réponse nulle part sur le net. Il est avéré que l'un de mes coéquipiers a ajouté à la web.config:

<httpCookies httpOnlyCookies="false" requireSSL="true" /> 

Ainsi, le web.config sur le bureau du développeur ne devrait pas avoir l'étiquette et le DEV/QAS et Prod fichiers web.config devraient avoir.

Je comprends également qu'il est possible pour les développeurs d'utiliser IIS Express et ensuite ils pourraient utiliser SSL localement.