У меня есть следующий код, который воспроизводит мой вопрос:Почему Session.Remove не удаляет объект сеанса, если за ним следует исключенное исключение?
protected void Page_Load(object sender, EventArgs e)
{
var test = Session["test"] as string;
if (test == null)
{
Session["test"] = "test";
Response.Redirect(Request.Path, false);
}
else
{
Session.Remove("test");
throw new Exception();
}
}
По сути, я хочу, чтобы иметь возможность удалить объект из сеанса независимо, если исключение или нет. Вышеупомянутый блок кода будет отлично работать с загрузкой первой страницы, но как только произойдет перенаправление, он будет продолжать выдавать исключение для каждой последующей загрузки страницы. Объект никогда не удаляется из сеанса.
Если вы поместите часы в бросок, вы увидите, что объект сеанса удален.
Редактировать # 1: После небольшого тестирования я заметил, что это поведение присутствует только в режиме состояния StateServer. Я тестировал против InProc и, похоже, работает так, как ожидалось. Я не могу протестировать режим SQL Server.
Карл, я думаю, что мой пример может быть немного запутанным. Я не намерен бросать исключение, если объект сеанса не существует. Мое намерение состояло в том, чтобы показать, что исключение (принудительное в моем примере) исключает удаление объекта сеанса. Я также исправил условие для проверки нулевой, а не пустой строки. – ddechant