2010-12-21 43 views
2

AppFabric的DataCacheFactory需要很長時間來初始化,所以我試圖創建一次並在接下來的請求中重新使用它。在Asp.net中存儲AppFabric DataCacheFactory的位置?

目前,我最好的想法是將它存儲在HttpContext中,但我也有一些WCF服務(它沒有設置HttpContext)。任何其他想法在哪裏以及如何處理?

謝謝!

回答

2

這是我已經給一些思想在過去幾個月的問題,但我還沒有拿出一個明確的答案......

我不知道HttpContext的是正確的根據this page「一個新的HttpContext對象將在請求開始時創建,並在請求完成時被銷燬」,所以我擔心如果你把DataCacheFactory放到HttpContext中,你會失去它在請求管道完成時。 (HttpContext的是不是我特別需要使用,所以我可以有這個完全錯誤的對象!)

不過,我認爲有多種選擇:

  • 如果使用Singleton pattern 創建DataCacheFactory(喬恩 飛碟雙向對 的優秀片做在C#單身與 線程安全here),該 辛格爾頓將主要採取存儲DataCacheFactory爲照顧你在實例字段中。

  • 此選項感覺有些不正常,但您可以將DataCacheFactory保留在ASP.NET緩存中。不是WCF開發者我不知道你有什麼權限,但是如果你可以訪問HttpRuntime對象,那麼緩存就可以從那裏訪問。

  • 另一個可能需要考慮的選擇是將DataCacheFactory存儲在應用程序狀態,儘管我認爲從WCF服務訪問它可能也很困難,因爲它通常是通過HttpContext訪問的。

0

我在使用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 
相關問題