我在Win7 64位。這是一個相當討厭的問題。下面是重現它的步驟:C#HttpRuntime.Cache
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的值將爲空。至少這就是發生在我身上的事情。我不明白爲什麼會發生這種情況,因爲值應該仍然在緩存中。在我真正的應用程序中,我還爲HttpRuntime.Cache.Insert添加了一個回調函數,以跟蹤項目不在緩存中的原因,並說它已過期。但是如果我給它30分鐘的絕對到期時間窗口,它怎麼會過期?有趣的是,如果使用Visual Studio Development Server而不是IIS來運行應用程序,則該值存在於緩存中!
這是您的答案嗎? http://stackoverflow.com/questions/1792972/c-sharp-httpruntime-cache-insert-not-holding-cached-value – Pete 2013-03-27 16:18:08
@皮特 - 不,如我所說,我添加了回調,看看爲什麼該項目是從緩存中刪除,但它說已過期,這是沒有意義的,因爲它有30分鐘的絕對過期窗口。 – dcp 2013-03-27 16:20:43
它可能是DST問題嗎?嘗試使用'DateTime.UtcNow.AddMinutes(30)'代替。 – 2013-03-27 16:41:57