Pregunta

Código ASP del lado del lado del servidor en una máquina Windows 2003, ASP.NET 2.0* instalado. Estamos teniendo un problema extraño en la que la primera vez que un usuario se conecta al sitio web, el session_onStart en los disparos globales.ASA, pero el objeto de sesión es nulo. Algo simple como:

Session.Timeout = 30

Causa el siguiente error: Objeto requerido: 'Sesión'

El sitio web ha sido 'creado' en la pestaña del directorio de inicio de IIS Manager, y las sesiones están habilitadas en la página de configuración para el sitio.

En la mayoría de los casos, el objeto de sesión existe si el usuario actualiza la página. Pero esa primera visita para un usuario único siempre causa el error.

¿Sugerencias? El código no tiene un error, ya que funcionó en el antiguo sistema Win2000.

Solo para reiterar: Windows 2003 Server, que ejecuta IIS6, con .NET 2.0 instalado. El sitio web se está ejecutando como una aplicación, no como un directorio virtual.

¿Fue útil?

Solución

Descubrí el problema. Se debía a tener más de un trabajador en el grupo de aplicaciones utilizado para el sitio web. Dado que no había garantía de qué proceso de trabajo manejaría la solicitud de un cliente, y cada proceso de trabajador crearía su propia instancia de la sesión del cliente, la sesión se eliminaría y se recreará cuando IIS decidiera que un proceso de trabajador diferente debería manejar una solicitud. El problema se resolvió utilizando solo un proceso de trabajadores en el grupo de aplicaciones y sacando todos los demás sitios web del grupo de aplicaciones y en el suyo.

Ahora estoy buscando una manera de tener varios trabajadores en el grupo de aplicaciones, pero que el cliente se adhiera al proceso de trabajadores. Pero ese es un problema diferente que investigaré.

Otros consejos

Un problema bastante interesante.

Sabemos que cuando la sesión se abandona explícitamente o eventualmente se desprende, se destruye rápidamente. Agregaría código como el siguiente, para garantizar que no puede suceder.

If Session("test") Is Nothing Then
    Response.Redirect("Whatever.asp")
End If

También puede llamar al código que crea sus objetos en este bloque; De esta manera, si detectas que la sesión fue destruida de alguna manera, podrías recrearlos.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top