現在、.net 4 で Windows サービスを開発しています。必要な情報を返す WS に接続します。タイマーを使用します。サービスは x 秒ごとに Web サービスに情報を要求します。しかし、経過ごとに WS にアクセスすることを避けるために、これらの資格情報をキャッシュに保存したいと考えています。
私はグーグルで検索しましたが、Windows サービスの状況に関連するものは何も見つかりませんでした (常に ASP.NET 環境に関するものです)。
私はMemoryCache
(からObjectCache
)System.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 サイトではない)強調テキストのキャッシュ