晶莹剔透 :
步骤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 回答
我结束了为appfabric完全删除asp.net outputcache提供程序并使用appfabric编写自定义缓存 . 工作得很好,很少有代码和缓存在azure上很容易 .