C# 计划每天在特定时间刷新HttpContext.Cache的任务
我有一个运行MVC3C的网站,它从Web服务中提取记录。随着它从webservice获得的数据集越来越大,我正在寻找一种方法,即在没有当前缓存的情况下,创建缓存不是由第一个访问站点的用户触发的,而是按照每天的计划(如cron作业、计划任务或其他) 我该怎么做? 我需要像这样的触发器库吗?(我宁愿使用更简单的解决方案) 我的控制器中现在有:C# 计划每天在特定时间刷新HttpContext.Cache的任务,c#,asp.net-mvc-3,caching,scheduled-tasks,httpcontext.cache,C#,Asp.net Mvc 3,Caching,Scheduled Tasks,Httpcontext.cache,我有一个运行MVC3C的网站,它从Web服务中提取记录。随着它从webservice获得的数据集越来越大,我正在寻找一种方法,即在没有当前缓存的情况下,创建缓存不是由第一个访问站点的用户触发的,而是按照每天的计划(如cron作业、计划任务或其他) 我该怎么做? 我需要像这样的触发器库吗?(我宁愿使用更简单的解决方案) 我的控制器中现在有: private List<DataSummary> GetSummaries() { //get summaries fr
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;
}
private List GetSummaries()
{
//从缓存中获取摘要(如果可用)
列表摘要=(列表)HttpContext.Cache[“摘要缓存”];
如果(摘要==null)
{
//缓存为空,检索值
摘要=_webservice.GetSummaries();
//缓存它
HttpContext.Cache.Add(“SummaresCache”,summaries,null,DateTime.Now.AddHours(12),Cache.NoSlidingExpiration,CacheItemPriority.Normal,null);
}
返回摘要;
}
编辑
使用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
}
创建计划任务也很简单-只需确保在对创建的exe具有执行权限的用户帐户中运行它,而不需要用户登录才能启动任务
编辑:添加了在Windows Server 2008上设置计划任务的指南
我从未在MVC网站上使用过可执行文件,听起来很奇怪。还是我在这里遗漏了什么?您说创建计划任务很简单。你有一个例子吗?可执行文件本身不是网站的一部分,你只需要创建一个独立的可执行文件并将其放在web根目录之外的服务器上。至于创建计划任务,我将使用Windows Server 2008指南编辑我的答案(假设您对服务器具有远程桌面访问权限)。感谢您提供详细的指南,很遗憾,我没有远程访问权限,但是a+1无论如何,因为我知道其他人会需要这个答案。我想你可以在自己的机器上设置一个计划任务来完成这个任务(因为你只是在点击你网站上的一个页面)。缺点是你的电脑不会一直开机。那么像:,我不需要可执行文件这样的服务怎么样?只需将cron指向该URL,它就可以工作了。今晚我有一个测试,天哪,我不知道其他人也有这个问题,谢谢你的投票