我有一个虚拟路径提供程序。问题是它缓存我的文件。每当我手动编辑其中一个aspx文件时,它引用VPP不会拉入新文件,它会继续重用旧文件,直到我重新启动网站。
我甚至在我的VirtualPathProvider类中过度使用了GetCacheDependency():
public override CacheDependency GetCacheDependency(string virtualPath, IEnumerable virtualPathDependencies, DateTime utcStart)
{
return null;
}
想法?
答案 0 :(得分:20)
返回null实际上是在告诉ASP.NET你没有任何依赖 - 因此ASP.NET不会重新加载该项。
您需要的是返回有效的依赖关系,例如
public override CacheDependency GetCacheDependency(string virtualPath, IEnumerable virtualPathDependencies, DateTime utcStart)
{
return new CacheDependency(getPhysicalFileName(virtualPath));
}
更正确的方法是确保您只处理自己的缓存依赖项(这是一个示意图):
public override CacheDependency GetCacheDependency(string virtualPath, IEnumerable virtualPathDependencies, DateTime utcStart)
{
if (isMyVirtualPath(virtualPath))
return new CacheDependency(getPhysicalFileName(virtualPath));
else
return new Previous.GetCacheDependency(virtualPath, virtualPathDependencies, utcStart);
}
答案 1 :(得分:16)
禁用缓存的正确方法是:
public override CacheDependency GetCacheDependency(string virtualPath, IEnumerable virtualPathDependencies, DateTime utcStart)
{
if (_IsLayoutFile(virtualPath))
{
return null;
}
return Previous.GetCacheDependency(virtualPath, virtualPathDependencies, utcStart);
}
public override String GetFileHash(String virtualPath, IEnumerable virtualPathDependencies)
{
if (_IsLayoutFile(virtualPath))
{
return Guid.NewGuid().ToString();
}
return Previous.GetFileHash(virtualPath, virtualPathDependencies);
}
答案 2 :(得分:2)
我不相信这是原始海报所要求的。他希望完全禁用缓存,而不是以更好的方式实现缓存,尽管你的帖子对后者很有帮助。
很多人使用VirtualPathProvider从数据库而不是文件系统中提取数据。我不知道如何创建文件系统依赖项是确定何时刷新文件的有用方法。
您如何强制它永远不使用缓存并始终检索文件的最新版本?这是个问题。
答案 3 :(得分:1)
public override CacheDependency GetCacheDependency(string virtualPath, IEnumerable virtualPathDependencies, DateTime utcStart)
{
return IsVirtualPath(virtualPath) ? new CacheDependency(HttpContext.Current.Server.MapPath("~/Resource.xml"))
: Previous.GetCacheDependency(virtualPath, virtualPathDependencies, utcStart);
}
答案 4 :(得分:-1)
根据需要为我工作的解决方案是:
但是,使用此解决方案会导致服务器挂起(Cassini,IIS 6,IIS 7,IIS 8)。悬挂只持续几分钟,然后结果交付。
我还包含了一个具有相同结果的虚拟路径/文件测试。我搞砸浏览器超时。
有人可以帮忙吗?