将应用程序级别数据存储在WCF服务中

时间:2013-03-05 17:04:48

标签: wcf c#-4.0

我正在尝试创建我的第一个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:

Read Global Application property from WCF Service

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

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

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

感谢。

1 个答案:

答案 0 :(得分:3)

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

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