c# – 在特定时间每天安排一次刷新HttpContext.Cache的任务

我有一个MVC 3 c#网站运行,它从webservice中提取记录.随着从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;

    }

编辑

使用CacheItemRemovedCallback导致超时错误

解决方法

这是一个很棘手的解决方案,但您可以随时在运行可执行文件的服务器上创建一个计划任务.这个可执行文件会点击您网站上的一个特定的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的旧版本中,我认为这在“管理工具”中被称为“计划任务”).打开任务计划程序结果.>右键单击左侧树的根节点 – “任务计划程序(本地)” – 并选择“创建基本任务”.>给任务一个名称和描述,以便以后识别.点击下一步.>选择你的持续时间(在你的情况下,每天的声音就是右).点击下一步.>如果你想改变开始时间.点击下一步.>将动作留作“启动程序”.点击下一步.>单击“浏览…”,找到您创建的可执行文件.点击下一步.>在最后一个屏幕上,勾选“打开属性对话框…”框,然后单击完成.>将安全选项更改为“运行用户是否登录”.如果需要,将用户或组更改为适当的用户帐户(一个具有运行该exe的必要权限).>单击确定.您将被要求输入将运行该任务的帐户密码.执行此操作并单击确定.>单击左侧的任务计划程序库.您的任务应显示在右侧的列表中.您可以通过右键单击并选择运行来测试它.

相关文章

在要实现单例模式的类当中添加如下代码:实例化的时候:frmC...
1、如果制作圆角窗体,窗体先继承DOTNETBAR的:public parti...
根据网上资料,自己很粗略的实现了一个winform搜索提示,但是...
近期在做DSOFramer这个控件,打算自己弄一个自定义控件来封装...
今天玩了一把WMI,查询了一下电脑的硬件信息,感觉很多代码都...
最近在研究WinWordControl这个控件,因为上级要求在系统里,...