C# 如何在自托管WebAPI应用程序中正确缓存数据
我有一个C WebAPI应用程序,使用TopShelf自托管。 我需要在应用程序启动时查询一些数据库,然后缓存静态结果,以便WebAPI控制器进行任何后续访问,从而优化一些数据访问。 我的解决方案包括两个项目: ServiceHub.Topshelf.WebAPI,其中包含所有业务逻辑和Topshelf.WebPI,而Topshelf.WebPI仅承载WebApiConfigurator.csC# 如何在自托管WebAPI应用程序中正确缓存数据,c#,asp.net-web-api,C#,Asp.net Web Api,我有一个C WebAPI应用程序,使用TopShelf自托管。 我需要在应用程序启动时查询一些数据库,然后缓存静态结果,以便WebAPI控制器进行任何后续访问,从而优化一些数据访问。 我的解决方案包括两个项目: ServiceHub.Topshelf.WebAPI,其中包含所有业务逻辑和Topshelf.WebPI,而Topshelf.WebPI仅承载WebApiConfigurator.cs 进行这种类型的数据缓存的合适技术是什么?正如Ric所建议的,我已经研究了Cache类。以下是我在SIg
进行这种类型的数据缓存的合适技术是什么?正如Ric所建议的,我已经研究了Cache类。以下是我在SIgnedContractsController.csc中完成缓存的步骤:
using System.Runtime.Caching;
.....
ObjectCache cache;
List<Model.SignedContracts> allSignedContracts;
.....
cache = MemoryCache.Default;
allSignedContracts = cache["signed_contracts"] as List<Model.SignedContracts>;
if (allSignedContracts == null)
{
allSignedContracts = new List<Model.SignedContracts>();
CacheItemPolicy policy = new CacheItemPolicy();
policy.AbsoluteExpiration = DateTimeOffset.Now.AddHours(1.0);
var result = (from contracts in new XPQuery<Model.SignedContracts>(uow) select contracts);
foreach (var item in result)
{
allSignedContracts.Add(item);
}
cache.Add("signed_contracts",allSignedContracts,policy);
}
….您看过缓存类了吗?我想我明白了,现在就把它贴出来作为答案。非常感谢。不错。做这种事很常见。
public HttpResponseMessage Get()
{
var _americasPriorWeekThree = Convert.ToInt32((from contracts in allSignedContracts
where contracts.Region == "Americas"
select contracts.PriorWeek3).First());