首页 > 解决方案 > 可访问 HttpContext 的 ASP.NET 任务调度

问题描述

首先,我的目标是实现任务调度,其中的工作是每天创建当前网页的离线HTML文件。

我已经尝试过 Quartz.NET,但它似乎不合适,因为HttpContextJob 类无法访问。由于页面内容高度依赖服务器端数据,并且在生成离线文件时有很多客户端编辑,如果不直接访问“现成”,这些可能会非常复杂HttpContext

对我有什么建议和想法吗?

(我使用的是早期版本的 ASP.NET 而不是 Core,所以HttpContextAccessor也不考虑。)

标签: asp.netvb.netscheduled-taskshttpcontext

解决方案


在创建Job时,您可以访问 HttpContext,您可以提供从HttpContext到的所有信息JobBuilder

代码取自https://www.quartz-scheduler.net/documentation/quartz-3.x/tutorial/more-about-jobs.html

代码在 c# 中,我希望你能在 vb.net 中做同样的事情

// define the job and tie it to our DumbJob class

IJobDetail job = JobBuilder.Create<DumbJob>()
    .WithIdentity("myJob", "group1")
    .UsingJobData("jobSays", "Hello World!") // key value (put required key and value from HttpContext)
    .UsingJobData("myFloatValue", 3.141f)
    .Build();

下面是一个在作业执行期间从 JobDataMap 获取数据的快速示例:

从 JobDataMap 获取值

public class DumbJob : IJob
{
    public async Task Execute(IJobExecutionContext context)
    {
        JobKey key = context.JobDetail.Key;

        JobDataMap dataMap = context.JobDetail.JobDataMap;

        string jobSays = dataMap.GetString("jobSays");
        float myFloatValue = dataMap.GetFloat("myFloatValue");

        await Console.Error.WriteLineAsync("Instance " + key + " of DumbJob says: " + jobSays + ", and val is: " + myFloatValue);
    }
}

推荐阅读