2009-10-01 7 views
7

私は仮想パスプロバイダを持っています。問題は、私のファイルをキャッシュすることです。 VPPが参照するaspxファイルの1つを手動で編集すると、新しいファイルが取り込まれず、サイトを再起動するまで古いファイルが再利用されます。バーチャルパスプロバイダはキャッシュを無効にしますか?

私は私のVirtualPathProviderクラスでさえ過剰乗っGetCacheDependency()しました:

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

アイデア?

答えて

19

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

正解/ Chandima Prematillake – r3mark

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); 
} 
2

私はこれが何であるか信じませんオリジナルのポスターが尋ねられました。彼は完全にキャッシングを無効にしたいが、良い方法で実装するのではなく、投稿が後者のために役立つ。

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

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

+0

応答はここにあります: http://stackoverflow.com/questions/3747858/asp-net-mvc-2-virtualpathprovider-getfile-every-time-for-every-要求/ 3766321#3766321 – Aliz

14

キャッシュを無効にする正しい方法はこれです:

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); 
    } 
+0

仮定に基づいて、nullキャッシュの依存関係を返すと、VPPはgetfilehashを使用しますか? –

+0

私は理解しました。それは真です:null CacheDependecyを返すと、VPPはGetFileHashを使用します。 –

-1

希望として私のために働いていたソリューションでした:

  • GetCacheDependency:リターンNULL;
  • GetFileHash: return Guid.NewGuid()。ToString();

ただし、この解決策を使用すると、サーバー(Cassini、IIS 6、IIS 7、IIS 8)がハングします。ぶら下げは数分間続くだけで、結果は配信されます。

同じ結果を持つ仮想パス/ファイルのテストも含まれています。私はブラウザのタイムアウトを混乱させた。

誰でも手助けできますか?

+0

新しい質問をする必要があります。答えの中で質問しないでください。 – Difster

+0

。ここで尋ねる:https:// stackoverflow。com/questions/45320336/virtualpathprovider-disabling-caching-hangs-server-iis-and-cassini – jbecker

関連する問題