【问题标题】:Azure appfabric cache as provider for distributed outputcache in multiple webroles fires errors "Failed to start monitoring file changes"Azure appfabric 缓存作为多个 webroles 中分布式输出缓存的提供程序触发错误“无法开始监视文件更改”
【发布时间】:2011-11-22 15:00:16
【问题描述】:

晶莹剔透:

第一步

  • 创建一个包含几个网站的 webrole,其中包含一个 default.aspx 文件和一个普通的常规 ,在 webconfig 中使用 appfabric 缓存提供程序作为 outputcache并使用提供的代码链接到您的 azure 缓存订阅

  • 只使用一个 webrole 实例,启动页面,它会运行它,重新加载几次,它可以正常工作

第 2 步

  • 现在增加到 2 个或更多此 WebRole 实例

  • 1234563 .aspx 缓存在分布式缓存中似乎是基于文件监控依赖,默认.aspx 页面的硬路径,如“E:\sitesroot\2\”。但是您可能(并且确实)在 Webrole 的其他实例上拥有“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)

自从一个星期以来我一直在努力解决这个错误,我不明白,如果有人知道在多个 webroles 实例上实现分布式 outputcache 的方法,请分享您的解决方案。

编辑

我结束了完全放弃 appfabric 的 asp.net 输出缓存提供程序并使用 appfabric 编写自定义缓存。效果很好,几行代码和对 azure 的缓存依赖变得容易。

【问题讨论】:

  • 愚蠢的问题,但你为什么将输出缓存放在共享缓存中?为什么不在本地机器上缓存呢?
  • 为什么我将输出缓存放在共享缓存中?因为这是蔚蓝!我有多个 webroles 实例,所以基本上每个 webrole 一个缓存不会从一个请求到另一个请求提供相同的结果,这不是解决方案。

标签: caching azure azure-appfabric


【解决方案1】:

我结束了完全放弃 appfabric 的 asp.net 输出缓存提供程序并使用 appfabric 编写自定义缓存。效果很好,几行代码和对 azure 的缓存依赖变得容易。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多