Повторяющаяся работа в Hangfire не запускается - PullRequest
0 голосов
/ 16 мая 2018

Моя повторяющаяся работа в 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 голосов
/ 09 июня 2018

Когда ваше приложение запускается, hangfire автоматически создает сервер, и этот сервер является IIS вашей машины, другие вещи, которые удаляют код statf hangfire из блока using, и ниже приведена некоторая конфигурация для уровня IIS Server, которую вы должны внедрить любойгде вы используете Hangfire.

Я также столкнулся с той же проблемой, и после того, как я много раз искал в Google ту же проблему, я получил решение по приведенной ниже ссылке, в которой упоминается некоторая часть конфигурации, которая очень важна.для непрерывного выполнения работы.

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>
0 голосов
/ 24 мая 2018

Если вы посмотрите на панель управления Hangfire, она скажет вам, сколько запущено BackgroundJobServer. Если запущен ноль BackgroundJobServers, то Hangfire ничего не будет делать, пока не запустится один.

enter image description here

Поскольку вы используете BackgroundJobServer в using, он удаляется после создания повторяющегося задания. BackgroundJobServer должен быть активным при запуске повторяющегося задания, иначе задание не будет создано. Вы можете запустить BackgroundJobServer в начале вашей программы и утилизировать ее при закрытии программы. Или вы можете запустить BackgroundJobServer в отдельном приложении-службе Windows , чтобы он всегда работал в фоновом режиме, пока машина включена.

Чтобы узнать больше о настройке фонового сервера, см .: http://docs.hangfire.io/en/latest/background-processing/

...