Windows服务和缓存
本文关键字:缓存 服务 Windows | 更新日期: 2023-09-27 18:08:19
我目前正在开发一个windows服务。net 4。它连接到一个WS发送回我需要的信息。我使用了一个计时器:每隔x秒,服务就会向webservice询问信息。但是为了避免每次都访问WS,我希望将这些凭据存储在缓存中。
我谷歌了一下,没有找到任何与Windows服务相关的情况(它总是关于ASP。网络环境).
我试过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缓存(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(不在网站)强调文本
试试这个
cacheItemPolicy.AbsoluteExpiration = new DateTimeOffset(DateTime.UtcNow.AddHours(24));
基本上你发送的是0年的绝对到期日。我不确定它是如何工作的,因为文档说DateTimeOffset需要月份为1-12。
你应该得到一个参数超出范围异常。???如果你到这里
然后运行这个…
使用系统;namespace Dela.Mono.Examples
{
public class HelloWorld
{
public static void Main(string[] args)
{
Console.WriteLine(new DateTimeOffset(0, 0, 1, 0, 0, 0, new TimeSpan(1, 0, 0, 0)));
}
}
您将得到以下异常:
Compiling the source code....
$/usr/local/bin/mcs /tmp/136548353410035/csharp136548353410035.cs 2>&1
Executing the program....
$mono /tmp/136548353410035/csharp136548353410035.exe
Unhandled Exception: System.ArgumentOutOfRangeException: Argument is out of range.
Parameter name: Parameters describe an unrepresentable DateTime.
at System.DateTime..ctor (Int32 year, Int32 month, Int32 day, Int32 hour, Int32 minute, Int32 second, Int32 millisecond) [0x00000] in <filename unknown>:0
at System.DateTime..ctor (Int32 year, Int32 month, Int32 day, Int32 hour, Int32 minute, Int32 second) [0x00000] in <filename unknown>:0
at System.DateTimeOffset..ctor (Int32 year, Int32 month, Int32 day, Int32 hour, Int32 minute, Int32 second, TimeSpan offset) [0x00000] in <filename unknown>:0
at Dela.Mono.Examples.HelloWorld.Main (System.String[] args) [0x00000] in <filename unknown>:0