我的应用在 Azure网站上运行良好(不是 Web 角色,请排除 Web 角色特定的答案!),但有时我的日志中出现以下错误:
System.UnauthorizedAccessException: Access to the path 'C:\DWASFiles\Sites\myAzureWebSiteNameHere\VirtualDirectory0\site\wwwroot' is denied.
at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
at System.IO.FileSystemEnumerableIterator`1.CommonInit()
at System.IO.FileSystemEnumerableIterator`1..ctor(String path, String originalUserPath, String searchPattern, SearchOption searchOption, SearchResultHandler`1 resultHandler, Boolean checkHost)
at System.IO.Directory.EnumerateFiles(String path)
at System.Web.WebPages.Deployment.WebPagesDeployment.AppRootContainsWebPagesFile(String path)
at System.Web.WebPages.Deployment.PreApplicationStartCode.OnChanged(String key, Object value, CacheItemRemovedReason reason)
at System.Web.Caching.CacheEntry.CallCacheItemRemovedCallback(CacheItemRemovedCallback callback, CacheItemRemovedReason reason)
这发生在站点重新启动之前(由 Azure,而不是我,可能是为了对包含站点的 VM 进行维护操作)。所以我得出的结论是它发生在“关闭”操作期间,当系统尝试清除缓存时。
我正在使用这样的 Asp.net 缓存:HttpContext.Current.Cache[myKey] = something
并且我没有定义任何特定的回调,例如CacheItemRemovedCallback
. 上面的调用堆栈确认错误在系统回调中。
它似乎是特定于 Azure 的(甚至可能特定于 Azure 网站),因为本地服务器上的同一个网站从未出现过这种错误。
你知道如何防止这个错误发生吗?谢谢 !