Caching Azure appfabric缓存作为多个webroles中分布式outputcache的提供程序引发错误”;无法开始监视文件更改";
晶莹剔透: 第一步Caching Azure appfabric缓存作为多个webroles中分布式outputcache的提供程序引发错误”;无法开始监视文件更改";,caching,azure,azure-appfabric,Caching,Azure,Azure Appfabric,晶莹剔透: 第一步 在webconfig中,使用appfabric缓存提供程序为outputcache创建一个webrole,其中包含几个带有default.aspx文件和普通规则的网站,并使用提供的代码链接到azure中的缓存订阅 只使用webrole的一个实例,启动页面,更改页面,重新加载几次,就可以正常工作 步骤2 现在增加到此WebRole的2个或更多实例 这是我的问题,在客户端重新加载default.aspx页面,现在根据loadbalancer将引导您的请求的Webrole,您
- 在webconfig中,使用appfabric缓存提供程序为outputcache创建一个webrole,其中包含几个带有default.aspx文件和普通规则的网站,并使用提供的代码链接到azure中的缓存订阅
- 只使用webrole的一个实例,启动页面,更改页面,重新加载几次,就可以正常工作
- 现在增加到此WebRole的2个或更多实例
- 这是我的问题,在客户端重新加载default.aspx页面,现在根据loadbalancer将引导您的请求的Webrole,您可能会得到System.Web.Caching.CacheDependency错误,因为分布式缓存中缓存的default.aspx似乎基于文件监视依赖性,default.aspx页面的硬路径,如“E:\sitesroot\2\”。但是,在Webrole的其他实例上,您可能有(并且确实有)F:\sitesroot\2\
我最终完全删除了appfabric的asp.net outputcache提供程序,并用appfabric编写了一个自定义缓存。工作非常好,azure上的代码和缓存依赖性非常简单。我最终完全放弃了appfabric的asp.net outputcache提供程序,并使用appfabric编写了一个自定义缓存。工作很好,azure上的代码行很少,缓存依赖性也很简单。愚蠢的问题,但为什么要将outputcache放在共享缓存中?为什么不在本地计算机上缓存?为什么我要将输出缓存放在共享缓存中?因为这是蔚蓝!我有多个webroles实例,所以基本上每个webrole一个缓存不能提供从一个请求到另一个请求的相同结果,也不是解决方案。
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)