首页 文章

Azure appfabric缓存作为多个Webroro中分布式输出缓存的提供程序触发错误“无法开始监视文件更改”

提问于
浏览
0

晶莹剔透 :

步骤1

  • 在webconfig中创建一个webrole,其中包含一些带有default.aspx文件和普通常规<%@ OutputCache Duration =“3600”VaryByParam =“*”%>的网站,使用appfabric缓存提供程序进行输出缓存并链接到缓存使用提供的代码在azure中订阅

  • 只使用webrole的一个实例,lauch页面,它chaches it,重载几次,它工作稳定

第2步

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

  • 这是我的问题,在客户端重新加载你的default.aspx页面,现在依赖于Webrole,loadbalancer将引导你的请求,你可能会因为default.aspx缓存在分布式中而得到一个System.Web.Caching.CacheDependency错误缓存似乎是基于文件监视依赖性,default.aspx页面的硬路径,如“E:\ sitesroot \ 2 \” . 但是你可能在Webrole的其他实例上有(并且你做)“F:\ sitesroot \ 2 \” .

所以它引发了一个错误:

System.Web.HttpException (0x80070003): Directory 'E:\sitesroot\2' 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)

我得到它,如果有人知道在多个webroles实例上实现分布式 outputcache 的方法,请分享您的解决方案 .

EDIT

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

1 回答

  • 0

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

相关问题