Интегрированный конвейер IIS7 - ответ. Не завершать запрос - PullRequest
2 голосов
/ 24 марта 2010

У меня есть следующий фрагмент кода, который работал, как и ожидалось, до того, как мы обновили интегрированный конвейер в 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 (), похоже, не заканчивается обработка. Страница продолжает работать так, как будто метод никогда не вызывался.

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

Спасибо.

1 Ответ

3 голосов
/ 24 марта 2010

Response.End повысит ThreadAbortException только когда HttpContext.IsInCancellablePeriod истинно.

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

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

...