1

コンテキスト: テキスト ファイルからいくつかのキーワードをキャッシュに入れるためのクラスが必要です。そのファイルにリスナーを配置して、変更時にキャッシュが更新されるようにします。

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 を返します)

すべてが私のローカル環境動作していますが、サーバーでは動作していません。何か不足していますか?

ありがとうございました。

4

0 に答える 0