我正在尝试创建我的第一个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
但我目前在我的项目中都没有这些。
这个线程是否安全,如果对我的服务发出多个请求且缓存为空,我是否会遇到竞争条件?
这也是我的第一个问题,如果我错过任何细节,请告诉我,我会更新。
感谢。
答案 0 :(得分:3)
您可以使用MemoryCache
对象的AddOrGetExisting方法(或this覆盖)以线程安全的方式完成此操作。
不要担心Application或HttpContext类。它们位于System.Web命名空间中,不建议在WCF中使用它们。你已经做对了。