4

現在、.net 4 で Windows サービスを開発しています。必要な情報を返す WS に接続します。タイマーを使用します。サービスは x 秒ごとに Web サービスに情報を要求します。しかし、経過ごとに WS にアクセスすることを避けるために、これらの資格情報をキャッシュに保存したいと考えています。

私はグーグルで検索しましたが、Windows サービスの状況に関連するものは何も見つかりませんでした (常に ASP.NET 環境に関するものです)。

私はMemoryCache(からObjectCacheSystem.Runtime.Caching成功せずに試しました。これがキャッシュを使用する私のクラスです。

私は良い方法ですか、それとも完全に間違っていますか?

public class Caching
{
    private const string CST_KEY = "myinfo";
    private const string CST_CACHENAME = "mycache";

    private MemoryCache _cache;

    public Caching()
    {
        _cache = new MemoryCache(CST_CACHENAME);
    }

    private CacheItemPolicy CacheItemPolicy
    {
        get
        {
            return new CacheItemPolicy
                {
                    SlidingExpiration = new TimeSpan(1, 0, 0, 0),
                    AbsoluteExpiration = new DateTimeOffset(0, 0, 1, 0, 0, 0, new TimeSpan(1, 0, 0, 0))
                };
        }
    }

    public bool SetClientInformation(ClientInformation client_)
    {
        if (_cache.Contains(CST_KEY))
            _cache.Remove(CST_KEY);

        return _cache.Add(CST_KEY, client_, CacheItemPolicy);
    }

    public bool HasClientInformation()
    {
        return _cache.Contains(CST_KEY);
    }

    public ClientInformation GetClientInformation()
    {
        return _cache.Contains(CST_KEY) ? (ClientInformation) _cache.Get(CST_KEY) : null;
    }
}

MemoryCache使用するのに適したクラスはありますか?

[別の投稿][1] では、ASP.NET Cache ( System.Web.Caching) を提案していますが、Windows サービスでは奇妙に思えますね。

少しでもご指導いただければ幸いです。

編集

私は違いなく変更new DateTimeOffset(0, 0, 1, 0, 0, 0, new TimeSpan(1, 0, 0, 0))し、完全に機能します!new DateTimeOffset(DateTime.UtcNow.AddHours(24))

[1]: .NET (Web サイトではない)強調テキストのキャッシュ

4

1 に答える 1