Problema de estado de sesión ASP.NET del servidor web IIS 7.5 con equilibrio de carga


14

Tenemos un problema con un sitio web ASP.NET donde las sesiones de los usuarios se comportan de manera extraña: los datos de sesión aparecen, desaparecen y vuelven a aparecer.

Creo que sé cuál es el problema:

  1. Nuestra configuración es 2 x servidores web balanceados de carga + base de datos de estado de sesión única.
  2. El almacenamiento del estado de la sesión de ASP.NET SQL parece depender del ID de la instancia del sitio web de IIS (ID de la metabase) para identificar de forma exclusiva el ID de la cookie de la sesión entrante y recuperar / almacenar valores.
  3. El ID de instancia del sitio web de IIS del sitio web es diferente en cada uno de los servidores activos (ID / W3SVC / 1 / Root en el servidor web A, ID / W3SVC / 2 / Root en el servidor web B).
  4. El equilibrio de carga no utiliza la afinidad del cliente, por lo que cada solicitud HTTP del usuario podría ir a cualquiera de los servidores.

Por lo tanto, cuando un usuario inicia sesión en el sitio y se mueve, cada llamada HTTP puede ir a cualquier servidor web y, por lo tanto, usar un registro de estado de sesión con diferentes ID dependiendo del servidor. En efecto, el usuario tendría simultáneamente 2 instancias de sesión separadas. Creo que he verificado esto ya que en la tabla ASPStateTempSessions de la base de datos , cada ID de cookie de sesión parece corresponder a 2 registros con nombres casi idénticos (sus ID solo difieren en los últimos caracteres, que creo que son un modificador basado en el AppID del AspStateTempApplications ( tabla) creados en segundos el uno del otro.

Por lo tanto, el estado de sesión parecerá comportarse mal ya que los cambios realizados en un registro de sesión solo persistirán en ese servidor web. Si el usuario se traslada al otro servidor con equilibrio de carga, los valores de la sesión parecerán desaparecer o revertirse.

Creo que la solución es sincronizar los ID de instancia de IIS de los sitios (por ejemplo, hacer que ambos / W3SVC / 1 / Root ), pero intenté editar ese valor en IIS en Configuración avanzada, y aunque se guardó bien, solo hizo El sitio devuelve 404s en ese servidor hasta que lo cambie de nuevo.

Me encontré un script VBS para este problema, pero parece ser para IIS 6 sólo por lo que me preocupa de intentarlo. ¿Alguien más ha encontrado esta situación en IIS 7.5 y cómo la solucionó?


EDITAR / SOLUCIÓN

Mi error fue que olvidé reiniciar IIS después de cambiar la ID de instancia del sitio en IIS. Después de esto, la ID se actualizó y las sesiones ASP.NET se sincronizaron en los dos servidores web.

Instrucciones completas:

  1. Escritorio remoto en el servidor LIVE1, abra IIS Mgr, haga clic en el sitio problemático y elija Configuración avanzada en la barra lateral.
  2. Cambie la ID a algo único, por ejemplo, 10. Haga clic en Aceptar.
  3. Reiniciar el servicio web ( c:\windows\system32\iisreset /restart)

Haga lo mismo para LIVE2 (asegúrese de que la ID del sitio sea la misma que en LIVE1)

Tenga en cuenta que la ID del sitio afecta la ubicación de los archivos del sitio, por ejemplo, la carpeta del archivo de registro sería, C:\inetpub\logs\LogFiles\W3SVC10por ejemplo.

Tenga en cuenta también que usted podría hacer estos cambios manualmente editando el sitio Identificación del atributo en el archivo de configuración de IIS en cada servidor: C:\Windows\System32\inetsrv\config\applicationHost.config. Requiere administrador privs y aún necesita un reinicio después.

Respuestas:


11

A juzgar por su pregunta, ¿parece que tiene un servidor de estado de sesión central (DB?) Que realiza un seguimiento de los datos de la sesión?

También debe sincronizar la clave de máquina que se utiliza para el cifrado para que funcione cualquier autenticación de formularios, etc. Esto también podría afectar la identificación de la sesión, no estoy seguro.

Configuración de claves de máquina en IIS 7

Además, debe hacer uso de la configuración compartida entre las máquinas, ya que podría solucionar el problema con diferentes claves de máquina.

¿Sincronización de configuración de IIS para la granja de servidores web?

EDITAR: cuando cambió la ID del sitio, ¿intentó reiniciar el administrador de IIS para ver si la raíz web había cambiado? Tal vez la configuración está conectada a la ID, lo que significa que un cambio en la ID también modifica cosas como la raíz del documento, etc.


Gracias por las ideas de Jishi pero ya había sincronizado machineKey en web.configs. Supongo que realmente estoy buscando una forma de cambiar la ID de instancia de IIS de un sitio sin tener que eliminar y reconfigurar completamente los sitios en los servidores web.
James McCormack

Cuando cambió la ID del sitio, ¿intentó reiniciar el administrador de IIS para ver si la raíz web había cambiado? Tal vez la configuración está conectado con el significado de identificación que un cambio en el ID también modifica la materia como la raíz del documento, etc.
jishi

1
Sí, eso fue todo! Olvidé reiniciar el servicio IIS (línea de comando iisreset / restart). Funcionó bien después de eso! Actualice su respuesta con esta información y le daré la respuesta aceptada.
James McCormack

Trato hecho. Me alegro que funcionó para usted.
jishi
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.