私はWin7 64ビットを使用しています。これはかなり厄介な問題です。これを再現する手順は次のとおりです。
Visual Studio で新しい C# Asp.Net プロジェクトを作成します (私は VS 2010 を使用していますが、これが問題になるかどうかはわかりません)。
Default.aspx のコード ビハインドで、このコードを
Page_Load
メソッドに追加します。HttpRuntime.Cache.Insert("foo", "test", null, DateTime.Now.AddMinutes(30), TimeSpan.FromMinutes(0)); string p = "var retval; retval = window.showModalDialog('Test.aspx','', 'dialogHeight:100px; dialogWidth: 100px;scroll: no;center: Yes; help: No; resizable: yes; status: no; unadorned: yes;');"; ScriptManager.RegisterStartupScript(this, GetType(), "openpop", p, true);
Test.aspx という別の Web フォームを追加します。マークアップには何でも好きなものを入れることができますが、それは重要ではありません。
Test.aspx のコード ビハインドで、この行を
Page_Load
メソッドに挿入し、ブレークポイントを設定します。string x = (string)HttpRuntime.Cache["foo"];
プロジェクトのプロパティで、アプリケーションがローカル IIS Web サーバーを使用して実行するように設定されていることを確認します。
プロジェクトを実行してブレークポイントに到達したら、もう一度ステップを踏んで x を割り当てさせます。その後、x の値は null になります。少なくともそれが私に起こっていることです。値がまだキャッシュにあるはずなので、なぜこれが起こっているのかわかりません。私の実際のアプリケーションでは、HttpRuntime.Cache.Insert へのコールバックも追加して、項目がキャッシュにない理由を追跡し、有効期限が切れていることを示しました。しかし、30 分の絶対有効期限ウィンドウを指定した場合、どうすれば期限切れになるのでしょうか?
興味深いことに、IIS の代わりに Visual Studio Development Server を使用してアプリケーションを実行すると、値がキャッシュに存在します。