2011-11-11 17 views
4

私は簡単なことをしようとしていますが、私は答えを見つけることができません。 アプリケーションレベル(ウェブサイト用)でキャッシュを削除する方法を知っています。WebRoleでWindows Azure Appfabric Cache全体をクリアする方法は?

しかし、webrole startで私のAzure Appfabricキャッシュのすべてのキャッシュをクリアする必要があります。

EDIT:できたらどうなりますか? Azure Asp.net共有キャッシュの重大な誤動作を考慮するか、私は愚かですか?

これは私がにこだわって、シナリオ:私はいくつかの異なるウェブサイト

  • を持っているAA WebRoleはすべて私のウェブサイトが60分と各ルートのDefault.aspxファイルを持って考えてみている

    • キャッシング、これは結果的に、いくつかのキャッシュされたページが60分
    • ためAppFabricのキャッシュに保存されているOutputCache期間=「3600」VaryByParam =「*」%>、ない空想コード
    • 私はそれらを参照@平野定期<%は、ユナーを考えてみましょうですフーdのようなパス上にキャッシュが作成されます
    • Webサイトをリセットするか、新しいデプロイメントをアップロードします
    • 新しく作成されたインスタンスにこのパスがあるとします: 'F:\ sitesroot \ X-X'
    • あなたは、私が持っているHERESに結果を得る:

    ディレクトリを 'E:\ sitesroot 12 \' が存在しません。ファイルの変更の監視を開始できませんでした。

    System.Web.HttpException (0x80070003): Directory 'E:\sitesroot\12' 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) 
    

    現在appfacbricキャッシュはハードパス「E:\ sitesroot \」とcachedepencyに頼っていたので、この問題があるかもしれないことを理解することが私にいくつかの時間を要しました。この経路が変わるなら、それは何ですか?

    どうすればいいですか?私はここで失われている、私Global.asax Application_Startでappcacheをクリアしようとしましたが、これは動作していない(と私はそれがなぜ理解していない)。

    は、ここでのGlobal.asaxのApplication_Start

    Public Shared Sub cacheClear() 
    
        Dim keys As New List(Of String)() 
        ' retrieve application Cache enumerator 
        Dim enumerator As IDictionaryEnumerator = HttpRuntime.Cache.GetEnumerator() 
        ' copy all keys that currently exist in Cache 
        While enumerator.MoveNext() 
         keys.Add(enumerator.Key.ToString()) 
        End While 
        ' delete every key from cache 
        For i As Integer = 0 To keys.Count - 1 
         HttpRuntime.Cache.Remove(keys(i)) 
        Next 
    
    End Sub 
    

    これはトリックを行う必要がありますが、それが思わない各ウェブサイト上のキャッシュをクリアするために私のコードです。

    確かに私は行方不明です。

    EDIT

    私はAppFabricのための完全asp.net outputcacheプロバイダをドロップし、AppFabricのでカスタムキャッシュを書き終わりました。うまく動作し、紺碧のコードとキャッシュの依存性はほとんどありません。

  • 答えて

    1

    私は100%確信していませんが、これはできないと思います。

    +0

    こんにちは、Azureの「プラグアンドプレイ」の重大なミスロジックがAsp.net用のキャッシュシステムを発見したと思います。私は自分の投稿を更新します。 – kdstack