0

晶莹剔透 :

步骤1

  • 创建一个包含几个网站的 webrole,其中包含一个 default.aspx 文件和一个普通的常规 <%@ OutputCache Duration="3600" VaryByParam="*" %>,在 webconfig 中使用 appfabric 缓存提供程序作为 outputcache 并链接到您的缓存订阅在天蓝色与提供的代码

  • 只使用一个 webrole 实例,启动页面,它会刷新它,重新加载几次,它运行良好

第2步

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

  • 这是我的问题,在客户端重新加载您的 default.aspx 页面,现在取决于 Webrole,负载均衡器将引导您的请求,您可能会收到 System.Web.Caching.CacheDependency 错误,因为 default.aspx 缓存在分布式缓存中似乎是基于文件监控依赖,default.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 实例上实现分布式输出缓存的方法,请分享您的解决方案

编辑

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

4

1 回答 1

0

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

于 2011-11-28T15:40:16.403 回答