8

Tengo un problema muy extraño con la sesión en ASP.NET 2.0. El sistema en el que estoy trabajando usa variables de sesión para almacenar parámetros en los objetos (como preguntas y respuestas) para generar un informe. Estas son instancias de clases con el mismo nombre, por lo que se rellenan con los parámetros de la siguiente manera:La sesión de ASP.NET finaliza inesperadamente

Este informe se genera a través de 4 páginas aspx. Primero define los parámetros de ubicación y fecha, la segunda página almacena preguntas y la tercera almacena respuestas. El último muestra enlaces a informes generados en formatos Excel y HTML. Todos los datos variables se almacenan en la sesión, y todo va bien, hasta la última página, cuando ocurre algo como una sesión.Abandono(), el evento Session_End se dispara y se pierden todas las variables. Esto ocurre solo una vez al día, para cada usuario registrado en el primer uso del informe, y luego puede probar todo el día docenas de veces y no volverá a verlo.

El problema ocurre en la misma página SIEMPRE, y el modo de sesión es InProc.

que ya lo han hecho las siguientes validaciones:

  1. marcado si había alguna Session.Abandon() o Session.clear() comandos. No hay ninguno.
  2. Tiempo de espera de la sesión comprobada, está establecido en 18 minutos, y el problema ocurre en cualquier momento como se indicó anteriormente, independientemente de cuánto tiempo lo haya estado usando en 18 minutos.
  3. Tiempo de espera comprobado de formularios, en Autenticación. También está establecido en 18 minutos.
  4. He aprendido que hay un error con Server.Transfer() que pueden a veces sesión de color y estado de vista, y se han sustituido por Response.Redirec()
  5. han monitoreado línea de sesión por línea de código, y todo va bien, y cuando la página está completamente cargada, simplemente muere. Todas las variables se han ido, pero la sesión sigue funcionando.
  6. Por lo que a mí respecta, IIS está configurado correctamente. No tengo acceso a él, pero todos los otros sistemas funcionan perfectamente.
  7. También he analizado algunos de los sistemas antes mencionados buscando alguna pista sobre lo que podría estar pasando, pero sus archivos web.config son muy similares a los que estoy teniendo y no se implementó ningún código especial para interactuar con la sesión diferentemente.
  8. También pensé en supervisar IIS para reinicios de aplicaciones, pero estoy bastante seguro de que no excede el límite predeterminado de 15. Sin embargo, no tengo acceso al servidor IIS, y todas las pruebas realizadas en mi computadora utilizan ASP. NET Development Server. El problema ocurre en ambos.
  9. Ha comprobado las posibilidades de reciclaje del proceso, como .config y los cambios del archivo asax, los cambios en/en el directorio bin, ninguno sucede.

siguientes restricciones:

  1. No se puede cambiar el modo de sesión para que no sea InProc debido a políticas de la empresa.
  2. El "proceso" de generación de informes se creó a través de 4 páginas. No estoy de acuerdo con esto, pero no puedo volver a hacerlo debido a restricciones de tiempo y presupuesto.

Cualquier idea o solución es útil. Me mantendré en contacto para cualquier actualización y prueba necesaria.

+0

¿Tiene algún acceso a los mecanismos de perfilador? Estábamos experimentando problemas de enjuague de sesión cuando la cantidad de memoria dedicada a w3wp excedía la especificada en machine.config. Los contadores de rendimiento de ASP.NET nos ayudaron mucho a depurar esto. –

+0

No hacemos uso del archivo machine.config. Según lo que sé, este archivo abarca todo el sitio web y afectaría a otras aplicaciones en el mismo sitio web de IIS. La infraestructura del servidor en la empresa aplica todos los sistemas en el mismo sitio web, como directorios virtuales. –

+0

¿Se puede publicar el código para mostrar en qué momento se dispara el session_end? ¿Y qué usas para generar los informes? compruebe si no maneja accidentalmente ninguna excepción (por ejemplo, en application_error). (Si el material de informes es de terceros, ejecute la página sin él para ver si aún se produce). – Jeroen

Respuesta

2

¡Me gustaría agradecer a todos por el esfuerzo!

Mi equipo y yo descubrimos lo que estaba sucediendo en este caso. Había un método que borraba los archivos y directorios temporales dentro de la carpeta del sitio web, lo que provocaba un reciclaje y una descarga de sesión. El código estaba calculando la fecha y la hora, y se suponía que debía eliminar los directorios cada 24 horas, de modo que cuando un usuario inicia sesión por primera vez en el sistema y genera el informe, borró el directorio y descargó la sesión.

1

Un par de sugerencias:

  1. Depurar el primer éxito a nivel local y ver si hay algo único en el camino.
  2. Asegúrese de que el primer golpe no está causando un problema con el proceso de trabajo
  3. Asegúrese de que no está utilizando el valor de la sesión antes de una devolución de datos

Lo que creo que está pasando es # 3. Está configurando los valores en una sesión y luego los consume de esa sesión antes de una devolución de datos, donde el valor de la sesión realmente se almacena. Como solo ocurre en el primer intento, los síntomas reflejan esta sospecha. Si estoy en lo cierto, resuelva esto consumiendo desde el mismo lugar donde consumió el valor de la sesión en lugar de establecer la sesión y luego intente sacarlo en la misma solicitud.

+0

En cuanto al n. ° 1, ya lo hice pero no vi nada "único". En el n. ° 2, no estoy seguro de cómo ver problemas en el proceso. Para # 3, ¿quiso decir que podría estar consumiendo los valores antes de que realmente estén establecidos? Ese no es el caso, porque he monitoreado una primera ejecución, y las variables, y sus respectivos valores y objetos se establecen en la primera página aspx, segundo y tercero solo llenan los objetos con parámetros ingresados ​​por el usuario en formularios, como casillas de verificación, radios y similares, el cuarto y último, está cargado con todas las variables intactas. –

+0

Las variables se usan cuando los archivos Excel y html se generan durante el evento Page_Load. Cuando se completa este evento, Session_End se activa repentinamente y las variables se vacían. ¿Crees que esto se está causando porque las variables se usan en Page_Load?No se revisa si es una devolución de datos o no, ya que esta página solo se carga para generar el informe y crear los enlaces, nada más. Este es un método muy extraño, sugeriría que se generaría en un Button_Click, pero no fui yo quien definió esta mierda. –

0

tuve un problema con las sesiones. en mi caso, el problema fue el recuento máximo de subprocesos de trabajo del grupo de aplicaciones. si va a usar la sesión predeterminada de asp.net, debe hacerlo 1. u otro hilo no puede obtener las sesiones.

Cuestiones relacionadas