2012-02-29 199 views
7

1.-Estoy usando servicios de informes y algunas veces obtengo este error ASP.NET session has expired or could not be found cuando intento cargar un informe.La sesión de ASP.NET ha caducado o no se pudo encontrar -> Debido a que Session.SessionID cambia (Reporting Services)

2.-Me di cuenta de que aparece este error cuando la propiedad Session.SessionID cambia aunque el usuario sea el mismo. Si no cambia, el informe se carga. Quiero decir, si actualizo el informe varias veces, cada vez que Session.SessionID es el mismo que el anterior, se carga el informe.

Documentación

3.-Microsoft dice:

When using cookie-based session state, ASP.NET does not allocate storage for session data until the Session object is used. As a result, a new session ID is generated for each page request until the session object is accessed. If your application requires a static session ID for the entire session, you can either implement the Session_Start method in the application's Global.asax file and store data in the Session object to fix the session ID, or you can use code in another part of your application to explicitly store data in the Session object.

If your application uses cookieless session state, the session ID is generated on the first page view and is maintained for the entire session.

El punto es que no puedo utilizar un estado de sesión sin cookies porque necesito las cookies.

¿Qué podría hacer para evitar este error? O ¿Qué podría hacer para evitar que Session.SessionID cambie en cada solicitud?

Respuesta

5

Probablemente esté almacenando su sesión InProcess. Intente cambiarlo al servidor de estado de la sesión. Puede encontrar más detalles here.

+0

Gracias por la punta, tienes razón, estoy usando proc. – user1239198

+0

He intentado cambiar la sesión a State Server, pero después recibí otro error: ** "No se puede serializar el estado de la sesión ..." **, así que me pregunto cómo puedo hacer que el estado de la sesión sea serializable. – user1239198

+0

Lo más probable es que no esté almacenando algunos objetos complejos en su estado, y esos objetos no son serializables. Asegúrese de que todos sus objetos sean serializables. Eche un vistazo aquí para un problema similar: http://stackoverflow.com/questions/5889240/unable-to-serialize-the-session-state Eche un vistazo aquí para obtener detalles sobre la serialización en .NET: http: // msdn. microsoft.com/en-us/library/ms973893.aspx –

1

La respuesta dada por Alexsandar es solo una de la solución a este problema.

Este enlace explica claramente lo que es la causa principal de este problema y las posibles soluciones: http://blogs.msdn.com/b/brianhartman/archive/2009/02/15/did-your-session-really-expire.aspx

En caso de Brian, la forma en que ha descrived el problema, si tenía sólo un único servidor IIS, utilizando una objeto de sesión en su código habría resuelto el problema porque en ese caso, el SessionID que se pasa en la solicitud del navegador al servidor se asignará a un sessionID correspondiente en el servidor y, por lo tanto, el mensaje de vencimiento de la sesión no vendrá.

La configuración del modo solo puede funcionar en el caso de un clúster de servidores donde Brian tenía varios servidores IIS que manejaban la misma solicitud. En ese caso, un modo fuera de proceso ayudará a recuperar el objeto de sesión de la Tienda de sesiones independientemente del golpe del servidor.

Basado en esta observación, concluiría que el problema de Brian no estaba relacionado con las cookies sino con un clúster de servidores. La información proporcionada por Brian en su pregunta y la solución subsiguiente me engañaron y de ahí esta aclaración. Espero que ayude a cualquiera que busque un problema similar.

Gracias, Vipul

0

Intente quitar SessionState = "somevalue" etiqueta de la parte superior de la página ASPX llamando. Estoy usando un SessionState personalizado y me niego a usar InProc ya que tengo varias instancias en Azure. Incluso puedes usar AsyncRendering = True si lo deseas. Avísame si esto fue el truco para ti.

3

Estoy usando el visor de informes 11.0.0; en su configuración web en el sistema.sección de la banda, poner la siguiente configuración:

<sessionState timeout ="120" mode="InProc" cookieless="false" /> 

Cuando se está generando el informe (C# código de abajo) en el objeto ReportViewer cambiar la propiedad KeepSessionAlive a la propiedad falso y lo AsynkRendering a falso, y eso es todo

 this.rvReporte.KeepSessionAlive = false; 
     this.rvReporte.AsyncRendering = false; 

(rvReporte) es un control ReportViewer se encuentra en mi Formulario asp.net Este trabajo solución para mí, espero que el trabajo para otras personas.

Saludos

+0

funcionó para mí. No necesitaba modificaciones en el estado de la sesión. – forX

0

para mí, resultó estar teniendo más de un proceso de trabajo para el grupo de aplicación.

1

Tuve el mismo problema en la página del visor de informes cuando se accedía al sitio web desde una intranet externa. La sugerencia de Hardvin me salvó el día, que es establecer this.rvReporte.KeepSessionAlive = false; this.rvReporte.AsyncRendering = false;

Cambié la propiedad en el control en sí. Estoy usando el visor de informes en un control de usuario que plantea un evento personalizado para el suministro de parámetros programáticamente en la página de host en lugar de solicitar a los usuarios.

1

que resolvieron este problema estableciendo AsyncRendering en false en el control ReportViewer servidor

Cuestiones relacionadas