8

仮想パスプロバイダーがあります。問題は、ファイルのキャッシュです。VPPが参照するaspxファイルの1つを手動で編集しても、VPPは新しいファイルをプルしませんが、サイトを再起動するまで古いファイルを再利用し続けます。

VirtualPathProviderクラスのGetCacheDependency()を上書きしました。

    public override CacheDependency GetCacheDependency(string virtualPath, IEnumerable virtualPathDependencies, DateTime utcStart)
    {
        return null;
    }

アイデア?

4

5 に答える 5

21

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);
    }
于 2009-11-17T21:21:14.630 に答える
2

これが元の投稿者が求めたものだとは思いません。あなたの投稿は後者に役立ちますが、彼はキャッシュを完全に無効にしたいと考えています。より良い方法で実装するのではありません。

非常に多くの人が、VirtualPathProvider を使用して、ファイル システムではなくデータベースからデータを取得しています。ファイルシステムの依存関係を作成することが、ファイルを更新する時期を判断するのにどのように役立つかわかりません。

キャッシュを使用せず、常に最新バージョンのファイルを取得するように強制するにはどうすればよいでしょうか? それが問題です。

于 2013-04-25T18:19:39.007 に答える
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);
}
于 2013-04-04T11:45:36.027 に答える