2008-10-07 49 views
19

El proyecto es ASP.NET 2.0, nunca he podido reproducirlo yo mismo, pero recibo correos electrónicos informándome que le sucede a los clientes muchas veces a la semana, a menudo algunas veces seguidas.Microsoft ReportViewer: errores caducados de sesión

Aquí está el error completo:

Detalles de la excepción:

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

Seguimiento de la pila:

[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

Respuesta

11

Tuvimos el mismo problema. Hasta ahora, solo lo encontramos cuando la sesión expiró pero usaron el botón Atrás en un navegador que hace un caché agresivo, lo cual está bien. Pero el ReportViewer intentó refrescarlo aunque la página principal no lo hizo. Por lo tanto, acabamos de agregar algunos hacky Global.asax gestión de errores:

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

Probé este código en la aplicación asp.net mvc 2. pero este método no fue llamado. – loviji

+0

@loviji: ¿Cómo está utilizando un ReportViewer en MVC? Es un control de WebForms ... Independientemente, Application_Error en Global.asax debería funcionar para todos los sitios de ASP.Net. Consulte cómo utilizar y configurar correctamente el método especial Application_Error en ASP.NET; hay mucha ayuda en la web sobre cómo hacerlo. –

+0

gracias esto ha ayudado a resolver mi problema –

0

¿Cuál es la pregunta? La sesión expiró y no pueden continuar.

Compruebe la velocidad del proceso de informe. Construya algún tipo de punto de referencia o simplemente pídales que midan el procesamiento del informe.

Fácilmente puede ser que funcione para usted, pero no para ellos (red más lenta, más datos para manejar, servidor de base de datos más lento, etc.).

Editar:Here is otra explanaition y tal vez una solución para el problema, pero no lo recomiendo para establecer el número de procesos de trabajo a 1 en un entorno procudtion.

3

espera de sesión

Esto puede ser debido a su tiempo de espera de la sesión es demasiado baja. Consulte la sección "sessionState" de su Web.Config, p. : -

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

Que establecería un tiempo de espera de sesión de 60 minutos.

grupo de aplicaciones de reciclaje

Otra posible causa, y uno que nos encontramos, es que el grupo de aplicaciones se recicla por alguna razón.

En caso de que fuera porque estábamos alcanzando una configuración de "memoria virtual máxima", acabo de subir eso y todo ha estado bien desde entonces.

Eche un vistazo a su registro de eventos del sistema para 1010, 1011, 1074, 1077, 1078, 1079, 1080 y 1117 eventos de W3SVC y vea si su grupo de aplicaciones está siendo reciclado y, de ser así, indique por qué.

2

Aquí estaba mi solución.

Ejecución de IIS en un conjunto de servidores Web, y cada granja tiene un recuento de jardín Web = 3 cada uno,

simplemente hice un grupo de aplicaciones independiente sólo para informes de SQL y establecer esa red count = 1 sólo para este reporte gardern piscina.

continuación, hizo un directorio virtual en IIS y un proyecto separado para la presentación de informes - el uso que los informes de la piscina

problema resuelto.

0

web gardern count=1 Obras para mí

1

he tenido este problema cuando se desarrollan en mi propio ordenador y no podía encontrar una respuesta en cualquier lugar de la red. Resultó que uno de mis compañeros de equipo añadido esto a la web.config:

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

Así que la web.config en el escritorio del desarrollador no debería tener la etiqueta y el DEV/QAS y archivos web.config Prod deberían tenerlo.

También entiendo que los desarrolladores pueden usar IIS Express y que podrían usar SSL localmente.

Cuestiones relacionadas