Интегрированный конвейер IIS7 — Response.End не завершает запрос

У меня есть следующий фрагмент кода, который работал, как и ожидалось, до того, как мы перешли на интегрированный конвейер в IIS7.

public void RedirectPermanently(string url, bool clearCookies)
{
  Response.ClearContent();
  Response.StatusCode = 301;
  Response.AppendHeader("Location", url);
  if(clearCookies)
  {
    Response.Cookies.Clear();
    Response.Flush();
    Response.End();
  }
}

Раньше, когда этот метод выполнялся, если значение clearCookies было равно true, ответ отправлялся клиенту, и обработка запроса заканчивалась. Теперь в Integrated Pipeline Response.End() похоже, что обработка не заканчивается. Страница продолжает работать, как будто метод никогда не вызывался.

Большой вопрос, почему и что изменилось!

Спасибо.


person MikeGurtzweiler    schedule 23.03.2010    source источник


Ответы (1)


Response.End поднимет ThreadAbortException только тогда, когда HttpContext.IsInCancellablePeriod истинно.

Одним из побочных эффектов Response.Flush() является то, что HttpContext.IsInCancellablePeriod становится ложным при выполнении в режиме интегрированного конвейера.

Попробуйте удалить Response.Flush() из кода. Завершение ответа все равно приведет к сбросу потока ответов.

person Chris Eldredge    schedule 23.03.2010