Как очистить весь Windows Azure Appfabric Cache при запуске WebRole? - PullRequest
4 голосов
/ 11 ноября 2011

Я пытаюсь сделать что-то простое, но я просто не могу найти ответ.Я знаю, как удалить кэш на уровне приложения (для веб-сайта).

Но мне нужно ОЧИСТИТЬ ВСЕ КЭШ моего Azure Appfabric кеша при запуске веб-ролика.

РЕДАКТИРОВАТЬ:Что если это можно сделать?Учитывая серьезную неисправность общего кэширования Azure Asp.net, или я тупой?

В этом сценарии я застрял:

  • У меня есть WebRole, которая имеетнесколько разных сайтов
  • Считайте, что на всех моих сайтах есть файл default.aspx в каждом корне с 60-минутным кэшированием, это обычная регулярная <% @ OutputCache Duration = "3600" VaryByParam = "*"%>, нетНеобычный код
  • Я просматриваю их, поэтому несколько кэшированных страниц хранятся в кэше appfabric в течение 60 минут
  • Учтите, что в этом развертывании зависимости кэша создаются по пути, подобному 'E: \ sitesroot\ xx '
  • Между тем, моя веб-перезагрузка сбрасывается или я загружаю новое развертывание
  • Теперь рассмотрим, что мои сайты во вновь созданных экземплярах имеют следующий путь:' 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 \".Что, если этот путь изменится, он ДЕЛАЕТ.

Так что я могу сделать?Я заблудился здесь, я пытался очистить appcache на Global.asax Application_Start, но это, похоже, не работает (и я не понимаю, почему это не так).

Вот мой код для очистки кешакаждый веб-сайт 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

Это должно сработать, но, похоже, это не так.

Там, безусловно, нелепый момент, которого мне не хватает.

РЕДАКТИРОВАТЬ

Я прекратил полностью удалять поставщика выходного кэша asp.net для appfabric и писать собственный кэш с помощью appfabric.Прекрасно работает, несколько строк кода и зависимость кэша от Azure - это просто.

1 Ответ

1 голос
/ 11 ноября 2011

Я не уверен на 100%, но не думаю, что это можно сделать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...