AppFabric的DataCacheFactory需要很長時間來初始化,所以我試圖創建一次並在接下來的請求中重新使用它。在Asp.net中存儲AppFabric DataCacheFactory的位置?
目前,我最好的想法是將它存儲在HttpContext中,但我也有一些WCF服務(它沒有設置HttpContext)。任何其他想法在哪裏以及如何處理?
謝謝!
AppFabric的DataCacheFactory需要很長時間來初始化,所以我試圖創建一次並在接下來的請求中重新使用它。在Asp.net中存儲AppFabric DataCacheFactory的位置?
目前,我最好的想法是將它存儲在HttpContext中,但我也有一些WCF服務(它沒有設置HttpContext)。任何其他想法在哪裏以及如何處理?
謝謝!
這是我已經給一些思想在過去幾個月的問題,但我還沒有拿出一個明確的答案......
我不知道HttpContext的是正確的根據this page「一個新的HttpContext對象將在請求開始時創建,並在請求完成時被銷燬」,所以我擔心如果你把DataCacheFactory放到HttpContext中,你會失去它在請求管道完成時。 (HttpContext的是不是我特別需要使用,所以我可以有這個完全錯誤的對象!)
不過,我認爲有多種選擇:
如果使用Singleton pattern 創建DataCacheFactory(喬恩 飛碟雙向對 的優秀片做在C#單身與 線程安全here),該 辛格爾頓將主要採取存儲DataCacheFactory爲照顧你在實例字段中。
此選項感覺有些不正常,但您可以將DataCacheFactory保留在ASP.NET緩存中。不是WCF開發者我不知道你有什麼權限,但是如果你可以訪問HttpRuntime對象,那麼緩存就可以從那裏訪問。
另一個可能需要考慮的選擇是將DataCacheFactory存儲在應用程序狀態,儘管我認爲從WCF服務訪問它可能也很困難,因爲它通常是通過HttpContext訪問的。
我在使用MemoryCache的WCF中解決了這個問題。將AppFabric緩存對象存儲在內存中,因此不必調用DataCacheFactory的昂貴的初始化。
Private Shared _memCache As MemoryCache
Public Shared ReadOnly Property Cache As DataCache
Get
If _memCache Is Nothing Then
_memCache = MemoryCache.Default
Dim factory As New DataCacheFactory
_memCache("memCache") = factory.GetCache("appFabricCache")
End If
Return CType(_memCache("memCache"), DataCache)
End Get
End Property
試圖使用HttpContext不是在WCF中的方式。
庫則需要包括此:
Imports System.Runtime.Caching
Imports Microsoft.ApplicationServer.Caching