コンテキスト: テキスト ファイルからいくつかのキーワードをキャッシュに入れるためのクラスが必要です。そのファイルにリスナーを配置して、変更時にキャッシュが更新されるようにします。
ASP .NET MVC 3 -- フレームワーク 4.5
Global.asax:
protected void Application_Start()
{
// Caching keywords
BigBrother.InitiateCaching(BigBrother.ReInitiateCaching);
}
BigBrother.cs クラス:
private static readonly Cache _cacheHandler = new Cache();
public static void InitiateCaching(CacheEntryRemovedCallback pCallBackFunction)
{
string filePath = HostingEnvironment.MapPath("~/Configurations/Surveillance/keywords.txt");
var fileContent = File.ReadAllText(filePath, Encoding.UTF8).Split(';');
_cacheHandler.AddToMyCache("surveillanceKeywords", fileContent, CachePriority.Default, new List<string> { filePath }, pCallBackFunction);
}
public static void ReInitiateCaching(CacheEntryRemovedArguments arguments)
{
InitiateCaching(ReInitiateCaching);
}
キャッシュ.cs:
public void AddToMyCache(string cacheKeyName, object cacheItem, CachePriority cacheItemPriority, List<string> filePath,
CacheEntryRemovedCallback pCallBackFunction)
{
callback = pCallBackFunction;
policy = new CacheItemPolicy
{
Priority = (cacheItemPriority == CachePriority.Default) ? CacheItemPriority.Default : CacheItemPriority.NotRemovable,
AbsoluteExpiration = DateTimeOffset.Now.AddYears(1),
RemovedCallback = callback
};
policy.ChangeMonitors.Add(new HostFileChangeMonitor(filePath));
cache.Set(cacheKeyName, cacheItem, policy);
}
したがって、一般的なワークフローは次のとおり です。 1. Application_Start が起動され、BigBrother がコールバック関数を使用してキーワードをキャッシュに入れます (非常にうまく機能します) 2. ファイル「keywords.txt」をリッスンします 3. ファイル「keywords.txt」が編集されると、キャッシュを更新します (実際には ReInitiateCaching が呼び出されますが、私のキャッシュ アイテム「surveillanceKeywords」は null を返します)
すべてが私のローカル環境で動作していますが、サーバーでは動作していません。何か不足していますか?
ありがとうございました。