C# 计划每天在特定时间刷新HttpContext.Cache的任务

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

我有一个运行MVC3C的网站,它从Web服务中提取记录。随着它从webservice获得的数据集越来越大,我正在寻找一种方法,即在没有当前缓存的情况下,创建缓存不是由第一个访问站点的用户触发的,而是按照每天的计划(如cron作业、计划任务或其他)

我该怎么做? 我需要像这样的触发器库吗?(我宁愿使用更简单的解决方案)

我的控制器中现在有:

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上设置计划任务的指南

  • 打开“开始”菜单
  • 在搜索框中键入“Task Scheduler”(在旧版本的Windows中,我相信这在管理工具中被称为“Scheduled Tasks”)。打开任务计划程序结果
  • 右键单击左侧树的根节点-“任务调度器(本地)”,然后选择“创建基本任务”
  • 为任务指定一个名称和描述,以便以后可以识别它。单击下一步
  • 选择您的持续时间(在您的情况下,每天的声音大约正确)。单击下一步
  • 如果需要,请更改开始时间。单击下一步
  • 将操作保留为“启动程序”。单击下一步
  • 单击“浏览…”并查找您创建的可执行文件。单击下一步
  • 在最后一个屏幕上,勾选“打开属性对话框…”的框,然后完成
  • 将安全选项更改为“无论用户是否登录都运行”。如有必要,将用户或组更改为适当的用户帐户(具有运行exe所需权限的帐户)
  • 单击“确定”。系统将要求您输入将运行任务的帐户密码。执行此操作并单击“确定”
  • 单击左侧的任务计划程序库。您的任务应该出现在右侧的列表中。您可以通过右键单击并选择Run来测试它

  • 我从未在MVC网站上使用过可执行文件,听起来很奇怪。还是我在这里遗漏了什么?您说创建计划任务很简单。你有一个例子吗?可执行文件本身不是网站的一部分,你只需要创建一个独立的可执行文件并将其放在web根目录之外的服务器上。至于创建计划任务,我将使用Windows Server 2008指南编辑我的答案(假设您对服务器具有远程桌面访问权限)。感谢您提供详细的指南,很遗憾,我没有远程访问权限,但是a+1无论如何,因为我知道其他人会需要这个答案。我想你可以在自己的机器上设置一个计划任务来完成这个任务(因为你只是在点击你网站上的一个页面)。缺点是你的电脑不会一直开机。那么像:,我不需要可执行文件这样的服务怎么样?只需将cron指向该URL,它就可以工作了。今晚我有一个测试,天哪,我不知道其他人也有这个问题,谢谢你的投票