【发布时间】: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