2010-12-21 73 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