私の問題を再現する次のサンプル コードがあります。
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 モードに対してテストできません。