我正在尝试做一件可能很简单的事,但我找不到答案。 我知道如何在应用程序级别(对于网站)删除缓存。
但是我需要在webrole start上清除我的azure appfabric缓存中的所有缓存。
编辑:怎么办?考虑到Azure Asp.net共享缓存中的严重错误或我是否愚蠢?
这就是我遇到的情景:
目录'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上很容易。
答案 0 :(得分:1)
我不是百分百肯定,但我认为不能这样做。