Кэш приложения Azure как поставщик распределенного кэша вывода в нескольких веб-ролях выдает ошибки «Не удалось запустить мониторинг изменений файла» - PullRequest
0 голосов
/ 22 ноября 2011

Кристально чистый:

Шаг 1

  • Создайте веб-роль с несколькими веб-сайтами с файлом default.aspx и обычным обычным <% @ OutputCache Duration = "3600" VaryByParam = "*"%>, в веб-конфигурации используйте поставщик кэша appfabric для outputcache и ссылку на вашу подписку на кеш в лазури с указанным кодом

  • Используйте только один экземпляр веб-ролика, запустите страницу, она заблокирует ее, перезагрузит несколько раз, она работает нормально

Шаг 2

  • Теперь увеличьте до 2 или более экземпляров этой веб-роли

  • Вот моя проблема, перезагрузите страницу default.aspx на клиенте, теперь, в зависимости от веб-ролика, который loadbalancer будет направлять ваш запрос, вы можете получить ошибку System.Web.Caching.CacheDependency при факте, что значение по умолчанию Кэширование ASPX в распределенном кеше, по-видимому, основано на зависимости от отслеживания файлов, жестком пути к странице default.aspx, например «E: \ sitesroot \ 2 \». Но у вас может быть (и у вас есть) «F: \ sitesroot \ 2 \» в других экземплярах веб-ролика.

Итак, выдается ошибка:

System.Web.HttpException (0x80070003): Каталог 'E: \ sitesroot \ 2' не существует. Не удалось запустить мониторинг изменений файла.

  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)

Я борюсь с этими ошибками уже неделю, я не понимаю, если кто-нибудь знает способ реализации распределенной outputcache для нескольких экземпляров webroles, пожалуйста, поделитесь своим решением.

EDIT

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

1 Ответ

0 голосов
/ 28 ноября 2011

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

...