ManagedPipelineHandler для AJAX POST аварийно завершает работу, если пользователь IE9 уходит со страницы во время выполнения этого вызова

Сценарий:

Пользователь использует IE9 (IE8 / 10 не затронут).У пользователя есть активный сеанс.Страница запускает запрос AJAX POST (не влияет) на контроллер сSessionState(SessionStateBehavior.Required) атрибут (ReadOnly не затронут). Что-то удерживает этот запрос от немедленной обработки (например, выполняется другой запрос с заблокированным сеансом).Пока выполняется AJAX POST, пользователь уходит со страницы (GET или POST - нене имеет значения)

Результат:

AJAX POST завершает работу и возвращает HTTP 500 (который браузер с тех пор прекратил прослушивать, но вы можете увидеть его в журналах IIS). IIS Failed Request Tracing показывает ошибку "Указанное сетевое имя больше не доступно. (0x80070040) «.Пользователь'Сеанс s блокируется на период от 80 до 120 секунд (обычно около 100), прежде чем может быть выполнен следующий запрос, требующий доступа к сеансу чтения / записи.

Дальнейшее копание в журнале, созданном IIS Failed Request Tracing, указывает на то, что AJAX POST падает такпосле состояние сеанса было заблокировано (во времяREQUEST_ACQUIRE_STATE фаза), но так какREQUEST_RELEASE_STATE фаза нене бывает, блокировка сеанса нет выпущен. Я'Я предполагаю, что тамкакой-то механизм безопасности в игре,Разблокировка сеанса через 80-120 секунд, но это очень длительное зависание явно нежелательно для моих пользователей.

У меня есть простой проект VS2012 / .Net 4.5 / MVC4, демонстрирующий проблему, доступную наhttps://github.com/jorupp/Ie9SessionCrash (имеет одну страницу, которая делает серию сообщений о действиях с помощью вызовов Sleep). IIS Failed Request Trace, показывающая проблему, находится в проекте по адресуhttps://github.com/jorupp/Ie9SessionCrash/tree/master/Ie9SessionCrash/TraceOfHttp500.

Чтобы обойти эту проблему, мыМы планируем убедиться, что мы никогда не будем делать AJAX POST-вызовы для действий, требующих сеанса, и либо:

Использование GET звонков, где это возможноИспользование вызовов POST для контроллеров, которые имеютSessionState(SessionStateBehavior.ReadOnly) приписывать.

Есть ли лучший способ справиться с этим, или я пропускаю патч IIS / .Net по этому поводу? Или этот сценарий недействителен по какой-то другой причине? Я'я не решаюсь винить в этом структуру / IIS, но я думаю, чтомы устранили мой код, будучи виновным.

Ответы на вопрос(2)

Ваш ответ на вопрос