Dan*_*ulp 10 c# caching scheduled-tasks httpcontext.cache asp.net-mvc-3
我有一个运行MVC 3 c#的网站从web服务中提取记录.随着它从Web服务获取的数据集变得越来越大,我正在寻找一种方法,在没有当前缓存的情况下,第一个用户不会在没有当前缓存的情况下触发创建缓存,而是按日计划(像cron工作,计划任务或其他).
我该怎么做?我是否需要某种类似Quartz.net的触发器库?(我宁愿使用更简单的解决方案)
我现在在控制器中拥有的是:
private List<DataSummary> GetSummaries()
{
//get summaries from cache if available
List<DataSummary> summaries = (List<DataSummary>)HttpContext.Cache["SummariesCache"];
if (summaries == null)
{
//cache empty, retrieve values
summaries = _webservice.GetSummaries();
//cache it
HttpContext.Cache.Add("SummariesCache", summaries, null, DateTime.Now.AddHours(12), Cache.NoSlidingExpiration, CacheItemPriority.Normal, null);
}
return summaries;
}
Run Code Online (Sandbox Code Playgroud)
编辑
使用CacheItemRemovedCallback
导致超时错误
这是一个有点棘手的解决方案,但您始终可以在运行可执行文件的服务器上创建计划任务。此可执行文件会访问您网站上的特定 URL,该 URL 又会按照您上面概述的方式填充缓存。要访问可执行文件中的 URL,您需要执行以下操作:
var req = (HttpWebRequest)WebRequest.Create(URL);
req.Timeout = 30000;
req.KeepAlive = false;
req.Method = "GET";
var res = (HttpWebResponse)req.GetResponse();
if (res.StatusCode == HttpStatusCode.OK){
// Your cache should be refreshed
}
Run Code Online (Sandbox Code Playgroud)
创建计划任务也非常简单 - 只需确保您在对您创建的 exe 具有执行权限的用户帐户中运行它,并且不需要用户登录即可启动任务。
编辑:添加了在 Windows Server 2008 上设置计划任务的指南
归档时间: |
|
查看次数: |
1215 次 |
最近记录: |