クリスタルクリア :
ステップ1
default.aspxファイルとプレーンな通常の<%@ OutputCache duration = "3600" VaryByParam = "*"%>を使用して、いくつかのWebサイトでWebロールを作成します。webconfigで、出力キャッシュにappfabricキャッシュプロバイダーを使用し、キャッシュサブスクリプションにリンクします提供されたコードで紺碧に
Webロールのインスタンスを1つだけ使用し、ページをローチし、それを追跡し、数回リロードし、確実に機能します
ステップ2
ここで、このWebRoleのインスタンスを2つ以上に増やします。
これが私の問題です。クライアントにdefault.aspxページをリロードします。ロードバランサーがリクエストを送信するウェブロールによっては、default.aspxが分散キャッシュにキャッシュされているという事実に基づいてSystem.Web.Caching.CacheDependencyエラーが発生する可能性があります。 「E:\ sitesroot \ 2\"」のようなdefault.aspxページのハードパスであるファイル監視の依存関係に基づいているようです。ただし、Webroleの他のインスタンスに「F:\ sitesroot \ 2 \」がある場合があります(実際にあります)。
したがって、エラーが発生します:
System.Web.HttpException(0x80070003):ディレクトリ'E:\ sitesroot\2'は存在しません。ファイル変更の監視を開始できませんでした。
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)
1週間以来、このエラーに苦しんでいます。わかりません。Webロールの複数のインスタンスに分散出力キャッシュを実装する方法を誰かが知っている場合は、ソリューションを共有してください。
編集
appfabric用のasp.netoutputcacheプロバイダーを完全に削除し、appfabricを使用してカスタムキャッシュを作成することを終了しました。うまく機能し、数行のコードと紺碧のキャッシュ依存性が簡単になりました。