晶莹剔透:
第1步
在webconfig中使用appfabric缓存提供程序创建一个webrole,其中包含一些带有default.aspx文件的网站和一个普通的常规<%@ OutputCache Duration =“3600”VaryByParam =“*”%>用于输出缓存并使用提供的代码
只使用webrole的一个实例,浏览页面,查看它,重新加载几次,它运行良好
第2步
现在增加到此WebRole的2个或更多实例
这是我的问题,在客户端重新加载default.aspx页面,现在根据Webrole,loadbalancer将引导您的请求,您可能会在默认情况下收到System.Web.Caching.CacheDependency错误缓存在分布式缓存中的.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实例上实现分布式 outputcache 的方法,请分享你的解决方案。
修改
我结束了为appfabric完全删除asp.net outputcache提供程序并使用appfabric编写自定义缓存。工作得很好,很少有代码和缓存在azure上很容易。
答案 0 :(得分:0)
我结束了为appfabric完全删除asp.net outputcache提供程序并使用appfabric编写自定义缓存。工作得很好,很少有代码和缓存在azure上很容易。