Как мне создать планировщик времени в asp.net MVC? - PullRequest
0 голосов
/ 13 февраля 2019

Я хотел бы создать относительно простую функцию планирования событий на веб-сайте MVC для функций приложения, не обязательно для пользователей в настоящее время, но может быть в будущем.Мое текущее желание состоит в том, чтобы использовать расписание, чтобы вызвать определенные изменения на веб-сайте на основе временных событий.Общая идея показана ниже в конце поста.

Сначала я исследовал Quartz для asp.net, потому что он был рекомендован для других постов, но совет в этом пакете с открытым исходным кодом специально рекомендовал не использовать его ввстроенный режим.Я не думаю, что смогу добавить его в качестве службы на сервер, на котором размещен сайт MVC.

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

Если многопоточность - плохая идея, пожалуйста, сообщите, где мне следует искать.Если многопоточность - правильная идея, любые предложения или предупреждения будут оценены.Я читаю на тему потоков в это время.

У меня есть несколько конкретных вопросов:

1) Should the individual event code run on the same thread, or does it matter? 
2) How do I handle the problem others have suggested occurs if 'IIS kills the thread' or the 'app pool is recycled'.
3) Is it a wrong idea that I send some message to the MVC site that triggers the Timer Process to overcome the issues in #2 above?
4) Is there a way to force a page to automatically refresh with a new display when the timer event occurs?  That doesn't seem to be the way asp.net MVC normally works.

Наконец, это звучало как проблема, которую другие, вероятно, решили, и свел к решению с открытым исходным кодом для asp.net MVC.Когда я просматриваю Nu-Get, некоторые, похоже, описывают эту проблему, но их очень мало скачивают.Любые рекомендации по этому маршруту?

enter image description here

1 Ответ

0 голосов
/ 13 февраля 2019

Думаю, в вашем случае будет хорошо использовать Hangfire.Вы можете настроить параллельный сервер и создавать разные задания с разным расписанием.

Для приложения NetCore:

app.UseHangfireServer();
app.UseHangfireDashboard("/hangfire", options);

// Process notifications every 6 hours
RecurringJob.AddOrUpdate<B2CEngineNotifications>(jobEngine =>  jobEngine.SendBillingNotifications(), "0 */6 * * *");

В этом случае каждое задание работает в своем собственном потоке.

1) Должен ли отдельный код события выполняться на одном и том женить, или это имеет значение? Это зависит от того, какого типа события вы ожидаете.Если они не зависимы, вы можете сделать это в отдельных потоках.

Как мне решить проблему, предложенную другими, возникает, если «IIS убивает поток» или «пул приложений перерабатывается». Hangfire создаст в вашей БД несколько таблиц.Если вы прервете процесс, при следующем запуске он получит все данные из базы данных и запустит события выполнения по расписанию.

Это неправильная идея, что я посылаю какое-то сообщение на сайт MVC, который запускает процесс таймерачтобы преодолеть проблемы, описанные в пункте 2 выше? Hangfire имеет свой собственный интерфейс для управления заданиями.Или вам нужно иметь возможность начать событие из вашего приложения MVC?Вы можете сделать это из MVC, просто изменив значения в БД.И Hangfire начнет работу.

Есть ли способ заставить страницу автоматически обновляться с новым отображением, когда происходит событие таймера?Похоже, это не так, как обычно работает asp.net MVC. В этом случае вам нужно использовать AJAX, чтобы иметь «живое» соединение с сервером, а «ask» что-то изменилось или нет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...