2

我正在尝试创建我的第一个 WCF 服务,并且我正在尝试存储应用程序数据。

我已经创建了我的 ServiceContracts 和 DataContracts 并且该服务正在运行。

我现在想从数据库中读取一些配置数据并将这些数据存储在应用程序范围内,以便只要服务处于活动状态,这些数据就可用于任何后续请求。这样我就不必每次处理请求时都连接到数据库。我不想将数据存储在配置文件中,数据已经存在于所述数据库中,我不想复制它。

我有以下实施和工作。

注 1:我删除了数据库代码以保持示例简单。

注意 2:MemoryCache 类存在于 System.Runtime.Caching 命名空间中。

private void LoadConfigData()
{
    if (!MemoryCache.Default.Contains("ConfigData"))
    {
        CacheItemPolicy cachePolicy = new CacheItemPolicy() {
                  AbsoluteExpiration = DateTimeOffset.Now.AddMinutes(5) };

        MemoryCache.Default.Add(
                  "ConfigData",
                  "ImagineThereIsDBDataHere",
                  cachePolicy);
    }
}

这是正确的使用方法吗?

这篇文章提到了使用 Application 类和 HttpContext:

从 WCF 服务读取全局应用程序属性

但我目前在我的项目中没有这些可用。

这个线程安全吗,如果对我的服务发出多个请求并且缓存为空,我会得到竞争条件吗?

这也是我的第一个问题,所以如果我错过了任何细节,请告诉我,我会更新。

谢谢。

4

1 回答 1

3

您可以使用MemoryCache对象的AddOrGetExisting方法(或覆盖)以线程安全的方式完成此操作。

不要担心 Application 或 HttpContext 类。它们位于 System.Web 命名空间中,不建议在 WCF 中使用它们。你已经在做正确的事了。

于 2013-03-05T17:21:48.633 回答