ManagedPipelineHandler para un AJAX POST se bloquea si un usuario de IE9 se aleja de una página mientras esa llamada estaba en curso

Guión:

El usuario está utilizando IE9 (IE8 / 10 no afectado).El usuario tiene una sesión activa.La página inicia una solicitud AJAX POST (GET no afectada) a un controlador con elSessionState(SessionStateBehavior.Required) atributoReadOnly no afectado). Algo impide que esta solicitud se procese inmediatamente (como otra solicitud en curso que tiene la sesión bloqueada).Mientras ese AJAX POST está en progreso, el usuario navega fuera de la página (GET o POST - no importa)

Resultado:

AJAX POST finaliza y devuelve un HTTP 500 (que el navegador ha dejado de escuchar, pero puede verlo en los registros de IIS). El seguimiento de solicitudes fallidas de IIS muestra que el error es "El nombre de red especificado ya no está disponible (0x80070040)".La sesión del usuario está bloqueada en algún lugar entre 80 y 120 segundos (generalmente alrededor de 100) antes de que se pueda ejecutar la próxima solicitud que requiera acceso de sesión de lectura / escritura.

Al seguir investigando en el registro creado por el Seguimiento de solicitudes fallidas de IIS, se indica que la POST de AJAX se bloquea de esta manera.después el estado de la sesión ha sido bloqueado (durante elREQUEST_ACQUIRE_STATE fase), pero desde laREQUEST_RELEASE_STATE fase no ocurre, el bloqueo de sesión no se libera. Supongo que hay algún mecanismo de seguridad en juego que desbloquea la sesión después de 80-120 segundos, pero obviamente no es deseable para mis usuarios.

Tengo un proyecto simple VS2012 / .Net 4.5 / MVC4 que demuestra el problema disponible enhttps://github.com/jorupp/Ie9SessionCrash (Tiene una página que hace una serie de publicaciones a acciones con llamadas de reposo). El seguimiento de solicitud fallida de IIS que muestra el problema se encuentra en el proyecto enhttps://github.com/jorupp/Ie9SessionCrash/tree/master/Ie9SessionCrash/TraceOfHttp500.

Para solucionar el problema, estamos planeando asegurarnos de que nunca hagamos ninguna llamada de AJAX POST a acciones que requieran sesión, y ya sea:

Usando llamadas GET cuando sea posibleUsando llamadas POST a los controladores que tienen laSessionState(SessionStateBehavior.ReadOnly) atributo.

¿Hay una mejor manera de lidiar con esto, o me estoy perdiendo un parche de IIS / .Net en relación con esto? ¿O es este escenario no válido por alguna otra razón? Dudo en culpar al marco / IIS por esto, pero creo que he eliminado mi código por culpa.

Respuestas a la pregunta(2)

Su respuesta a la pregunta