В настоящее время я разрабатываю службу Windows в .net 4. Он подключается к WS, который отправляет обратно необходимую мне информацию. Я использую таймер: каждые х секунд сервис запрашивает у webservice информацию. Но чтобы избежать доступа к WS на каждом этапе, я хотел бы сохранить эти учетные данные в кеше.Служба Windows и кеш
Я искал googled и не нашел ничего подходящего для ситуации службы 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]: Caching for .NET (not in websites)выделенный текст
это тот же самый вопрос: http://stackoverflow.com/questions/6059860/memorycache-add-returns-true-but-does-not-add-item-to-cache –