sessionstate net mvc increase change asp asp.net timeout iis-7.5 httprequest session-state

asp.net - net - Solicitudes que cuelgan en el módulo Session en IIS 7.5



sessionstate timeout (4)

¿Es posible que esos usuarios tengan otra solicitud de larga duración y las solicitudes que usted ve acumulando son en realidad solicitudes secundarias? De forma predeterminada, ASP.NET bloqueará la sesión hasta que se complete una solicitud. Si llega una segunda solicitud antes de que se complete la primera, tendrá que esperar. Si está utilizando MVC, puede cambiar este comportamiento agregando un atributo a su controlador.

[SessionState (SessionStateBehavior.ReadOnly)]

Esto hace que la sesión sea de solo lectura, eliminando el comportamiento de bloqueo que permite procesar las solicitudes posteriores.

De vez en cuando, algunas solicitudes en mi sitio web comienzan a bloquearse en el estado RequestAcquireState del módulo de sesión. Cuando esa espiral comienza, todas las solicitudes expiran y debemos reiniciar IIS en el servidor afectado.

Lo investigué mucho y la única conclusión que obtuve es que de alguna manera se está produciendo un punto muerto mientras la aplicación intenta acceder a los datos de usuario almacenados en la sesión.

La única opción que se me ocurre para solucionar este problema es reducir o dejar de usar Sesiones en mi aplicación. Esto es definitivamente parte del plan, pero tomará un tiempo antes de que podamos completar eso.

Ejecutamos 6 máquinas con IIS 7.5, fuera del proc StateServer y la afinidad del servidor en nuestro Balance de carga.

¿Alguna sugerencia sobre cómo solucionar este problema o solucionarlo sin tener que eliminar las Sesiones por completo?


Acabo de descubrir hoy que si tiene una solicitud de larga duración (o, en mi caso, un bucle infinito), todas las solicitudes subsiguientes se bloquearán, porque de manera predeterminada ASP.NET se bloquea en la sesión.

Por lo tanto, si tiene usuarios con solicitudes en RequestAcquireState , verifique si hay una solicitud en ExecuteRequestHandler que bloquee la sesión y, por lo tanto, impida que se inicien otras solicitudes.

Aquí hay una discusión sobre cómo evitar el bloqueo en la sesión. (Básicamente, cree la mayoría de sus páginas como Sesión de solo lectura y modifique la sesión tan raramente como pueda).


El mecanismo de bloqueo existe tanto en el proveedor como en el módulo de sesión (Módulo de sesión IIS). Puede desarrollar un módulo de sesión personalizado, pero aún necesita un proveedor sin bloqueo o puede desarrollar un proveedor personalizado sin bloqueo, pero aún necesita el módulo de sesión de IIS y no es tan fácil de implementar a ese nivel.

La solución es UnlockedStateProvider [aka Unlocked]

Siga el conejo blanco: P (Verifique el proyecto de demostración, se explica todo).