不会触发hangfire中的重复工作

时间:2018-05-16 11:21:34

标签: c# hangfire

无论我放入什么时间表,我在Hangfire中的重复工作都没有被触发。我尝试使用BackgroundJob只是为了确保某些工作正常,而且确实如此。我还检查了数据库和"哈希"正在使用计划作业正确填充表。

以下是我正在使用的代码:

try
{
    using(var server = new BackgroundJobServer(serverOptions,storage))
    {
        Log("Hangfire server started");
        RecurringJob.AddOrUpdate("Mail", () =>
                 _notificationHelper.SendEmail(result)
                 , Cron.MinuteInterval(1), TimeZoneInfo.Local
             );

        //BackgroundJob.Enqueue(() => _notificationHelper.SendEmail(result));
    } 
}

那我在这里做错了什么?

2 个答案:

答案 0 :(得分:2)

如果查看Hangfire Dashboard,它会告诉您正在运行的BackgroundJobServers的数量。如果没有运行BackgroundJobServers,那么在启动之前Hangfire将不会执行任何操作。

enter image description here

由于您在BackgroundJobServer中使用using,因此会在创建定期作业后将其处理。触发定期作业时,BackgroundJobServer必须处于活动状态,否则不会创建作业。您可以在程序开始时启动BackgroundJobServer,并在关闭程序时将其丢弃。或者您可以在服务中运行BackgroundJobServer,以便它始终在后台运行。

要了解有关设置后台服务器的详细信息,请参阅:http://docs.hangfire.io/en/latest/background-processing/

答案 1 :(得分:0)

当您的应用程序启动时,hangfire将自动创建一个服务器,该服务器是您的计算机IIS,其他东西从使用块中删除hangfire statrup代码,以下是您必须实现任何IIS服务器级别的配置你在哪里使用hangfire。

我也遇到过同样的问题,在谷歌搜索了同样的问题之后,我从下面的链接中得到了解决方案,其中提到了一些配置部分,这对于连续运行你的工作非常重要。

http://docs.hangfire.io/en/latest/deployment-to-production/making-aspnet-app-always-running.html

-----以下是您必须在全局applicationHost.config文件中执行的配置(%WINDIR%\ System32 \ inetsrv \ config \ applicationHost.config)。

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

<!-- ... -->

<sites>
    <site name="MySite" id="1">
        <application path="/" serviceAutoStartEnabled="true"
                              serviceAutoStartProvider="ApplicationPreload" />
    </site>
</sites>

<!-- Just AFTER closing the `sites` element AND AFTER `webLimits` tag -->
<serviceAutoStartProviders>
    <add name="ApplicationPreload" type="WebApplication1.ApplicationPreload, WebApplication1" />
</serviceAutoStartProviders>