【问题标题】:ASP.NET Website Run process every some minutesASP.NET 网站每隔几分钟运行一次
【发布时间】:2016-05-28 07:43:36
【问题描述】:

我正在寻找以下问题的解决方案:我有一个网站,希望每隔一小时(大约)将邮件发送到某个地址。 所以我决定为 C# 使用 Quartz 库。我写了作业、Start() 函数和 Execute:

public static void Start()
{
    IScheduler scheduler = StdSchedulerFactory.GetDefaultScheduler();
    scheduler.Start();

    IJobDetail job = JobBuilder.Create<EmailJob>().Build();

    ITrigger trigger = TriggerBuilder.Create()
    .WithIdentity("trigger1", "group1")
    .StartNow()
    .WithSimpleSchedule(x => x
        .WithIntervalInMinutes(50)
        .RepeatForever())
    .Build();

    scheduler.ScheduleJob(job, trigger);
}

在 Application_start() 中:

 JobScheduler.Start();

当我在本地运行网站时,它运行良好,因为应用程序一直处于“播放”模式。因此它按预期每 50 分钟发送一次邮件。

现在解决问题:将网站上传到服务器时,Job 只工作了一次 - 第一次。在我阅读之后,我对这个问题的结论是,网站应用程序有一个“睡眠”模式,所以如果有人没有进入网站,应用程序就处于睡眠状态,所以工作不工作并且电子邮件不发送。

所以我的问题是 - 如果我想要一个每 50 分钟运行一次功能的调度程序,而不取决于是否有人进入该网站,我该怎么办?

【问题讨论】:

标签: c# asp.net quartz-scheduler


【解决方案1】:

检查您的设计。您最好创建一个控制台应用程序并使用windows task Scheduler 或编写Windows Service Application

【讨论】:

    【解决方案2】:

    根据您使用的 IIS 版本,它看起来会略有不同。但是您需要将您的应用程序设置为alwaysrunning 模式:
    在你的 web.config 添加一个 applicationsPools 部分,如下所示:

    <applicationPools>
      <add name="appName" managedRuntimeVersion="v4.0" startMode="AlwaysRunning" />
    </applicationPools>
    

    或者您可以通过单击应用程序池上的高级设置在 IIS 管理中更改此设置。

    (当然,将managedRuntimeVersion 设置为您的应用程序版本)

    编辑:正如 Ravi 所说,这必须与启动模块或保持站点运行的某些外部服务相结合。

    另一个解决方案可能是迁移到Hangfire 并使用IProcessHostPreloadClient 以及我的alwaysrunning 方法。

    【讨论】:

    • 实际上这个设置只会确保 IIS 在回收或崩溃时旋转一个新的 w3wp,但它不会启动应用程序域并加载必要的程序集,这就是您需要应用程序初始化模块或像 pingdom 这样的外部服务会生成一个虚拟请求,该请求会启动 appdomain 并加载必要的程序集。
    • 嗯,听起来不错。当站点重新启动时,Quartz 作业将被重新安排,并可能导致作业永远不会执行。我不知道 Quartz 是否有任何开箱即用的功能来处理这个问题,但是 Hangfire 可以使用 IProcessHostPreloadClient
    • 抱歉想在这里编辑-“实际上这个设置只会确保 IIS 在回收/崩溃/空闲超时时旋转一个新的 w3wp,但它不会启动应用程序域并加载必要的程序集,这就是为什么您需要应用程序初始化模块或像 pingdom 这样的外部服务来生成一个虚拟请求,该请求会启动 appdomain 并加载必要的程序集”。
    猜你喜欢
    • 2012-07-14
    • 2017-05-08
    • 2020-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-06
    • 2017-04-03
    • 1970-01-01
    相关资源
    最近更新 更多