gpt4 book ai didi

c# - Windows 服务和缓存

转载 作者:行者123 更新时间:2023-11-30 12:30:32 28 4
gpt4 key购买 nike

我目前正在 .net 4 中开发一个 Windows 服务。它连接到一个 WS,它会发回我需要的信息。我使用计时器:每隔 x 秒,服务会向网络服务询问信息。但是为了避免每次访问 WS,我想将这些凭据存储在缓存中。

我用谷歌搜索并没有找到与 Windows 服务情况相关的任何内容(它总是与 ASP.NET 环境有关)。

我试过 MemoryCache(来自 System.Runtime.CachingObjectCache)但没有成功。这是我使用缓存的类(class)。

我是做对了还是完全错了?

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(DateTime.UtcNow. AddHours(24)) 没有区别 并且完美运行!

[1]: Caching for .NET (not in websites) 强调文本

最佳答案

试试这个。

cacheItemPolicy.AbsoluteExpiration = new DateTimeOffset(DateTime.UtcNow.AddHours(24));

基本上,您发送的是 0 年的绝对到期日期。我不确定它是如何工作的,因为文档说 DateTimeOffset 需要月份为 1-12。

你应该得到一个参数超出范围的异常。 ???如果你去here

然后运行这个...

使用系统;

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

关于c# - Windows 服务和缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15900768/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com