2010-08-09 62 views
0

企業庫的CachingCallHandler使用NoAbsoluteExpiration緩存項目。但是,我沒有看到一種方法來使緩存無效。那個人會想要一個項目永遠緩存而無法使其失效,沒有任何意義。CachingCallHandler無法使緩存對象無效?

在我實施我自己的失效方法之前,我想驗證不存在我不知道的微不足道的失效機制?

更新:

看起來這不是建於但是,我認爲它是使用爲重點的GetHashCode的。我可以這樣刪除失效的鑰匙。

我仍然試圖找出爲什麼要滑動到期。當然,如果可以將失效期限與數據庫聯繫起來,或者使用失效更新文件,那麼它可能是理想的。但是,如果沒有這種緩存失效的先進機制,這似乎毫無意義。

回答

0

您寫道:

那一個希望的項目緩存 永遠

但正如你提到以後,它實際上是一個滑動到期,因此項目最終會從緩存如果去掉它們在一定時間內不被訪問。

不幸的是,CachingCallHandler僅使用滑動過期:

這裏就是它在代碼:

private void AddToCache(string key, object value) 
{ 
    object[] cacheValue = new object[] { value }; 
    HttpRuntime.Cache.Insert(
     key, 
     cacheValue, 
     null,      // No Cache Dependencies 
     Cache.NoAbsoluteExpiration, 
     expirationTime,   // Sliding expiration (default 5 minutes) 
     CacheItemPriority.Normal, 
     null      // No CacheItemRemovedCallback 
    ); 
} 

至於什麼這種方法的問題是,它似乎有點有限。但是,它確實解決了您有相當靜態數據的情況,這些數據不需要根據需要進行刷新。

請注意,由於「不可解析的安全漏洞」,CachingCallHandler已從Enterprise Library 5.0中刪除,因此您可能不想使用此功能。

+0

謝謝。是的,我已經重寫了這段代碼來使用絕對過期。 – 2010-08-17 15:51:04

+0

就像後續一樣,可以通過獲取社區貢獻庫來重寫此代碼。 – 2010-08-17 15:52:54

+0

@Curtis White:EL 5.0 Change Log表示CachingCallHandler將在EL contrib站點(http://entlib.codeplex.com)中,但我無法在其中找到它。如果您正在考慮提供您的修改,那麼我會建議創建一個新的處理程序並提交。 – 2010-08-17 17:21:32