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