如何在WebRole上清除整个Windows Azure Appfabric Cache?

时间:2011-11-11 19:30:30

标签: azure appfabric azure-caching

我正在尝试做一件可能很简单的事,但我找不到答案。 我知道如何在应用程序级别(对于网站)删除缓存。

但是我需要在webrole start上清除我的azure appfabric缓存中的所有缓存。

编辑:怎么办?考虑到Azure Asp.net共享缓存中的严重错误或我是否愚蠢?

这就是我遇到的情景:

  • 我有一个WebRole,它有几个不同的网站
  • 考虑我的所有网站在每个根目录上都有一个default.aspx文件,缓存时间为60分钟,这是普通常规<%@ OutputCache Duration =“3600”VaryByParam =“*”%&gt ;,没有花哨的代码
  • 我浏览它们,因此几个缓存页面存储在appfabric缓存中60分钟
  • 考虑一下这个部署缓存中的漏洞依赖性是在'E:\ sitesroot \ xx'之类的路径上创建的
  • 介于两者之间,我的Webrole重置或上传新部署
  • 现在考虑我在新创建的实例中的网站有这条路径:'F:\ sitesroot \ xx'
  • 你明白我的结果:

目录'E:\ sitesroot \ 12'不存在。无法开始监控文件更改。

System.Web.HttpException (0x80070003): Directory 'E:\sitesroot\12' does not exist. Failed to start monitoring file changes.
at System.Web.FileChangesMonitor.FindDirectoryMonitor(String dir, Boolean addIfNotFound, Boolean throwOnError)
at System.Web.FileChangesMonitor.StartMonitoringPath(String alias, FileChangeEventHandler callback, FileAttributesData& fad)
at System.Web.Caching.CacheDependency.Init(Boolean isPublic, String[] filenamesArg, String[] cachekeysArg, CacheDependency dependency, DateTime utcStart)
at System.Web.Caching.CacheDependency..ctor(Int32 dummy, String[] filenames)
at System.Web.Caching.OutputCache.HasDependencyChanged(Boolean isFragment, String depKey, String[] fileDeps, String kernelKey, String oceKey, String providerName)
 at System.Web.Caching.OutputCache.Get(String key)
 at System.Web.Caching.OutputCacheModule.OnEnter(Object source, EventArgs eventArgs)
at System.Web.HttpApplication.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
 at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)

我花了一些时间才明白这个问题可能是因为当前的appfacbric缓存依赖于缓存依赖性和硬路径“E:\ sitesroot \”。如果这条路径改变了,那该怎么办呢。

那我该怎么办?我迷失在这里,我试图清除Global.asax Application_Start上的appcache,但这似乎不起作用(我不明白为什么它没有)。

这是我在每个网站Global.asax Application_Start

上清除缓存的代码
Public Shared Sub cacheClear()

    Dim keys As New List(Of String)()
    ' retrieve application Cache enumerator
    Dim enumerator As IDictionaryEnumerator = HttpRuntime.Cache.GetEnumerator()
    ' copy all keys that currently exist in Cache
    While enumerator.MoveNext()
        keys.Add(enumerator.Key.ToString())
    End While
    ' delete every key from cache
    For i As Integer = 0 To keys.Count - 1
        HttpRuntime.Cache.Remove(keys(i))
    Next

End Sub

这应该可以解决问题,但似乎没有。

我错过了一个荒谬的观点。

修改

我结束了为appfabric完全删除asp.net outputcache提供程序并使用appfabric编写自定义缓存。工作得很好,很少有代码和缓存在azure上很容易。

1 个答案:

答案 0 :(得分:1)

我不是百分百肯定,但我认为不能这样做。