Планировщик задач Windows ИЛИ Функции TaskService в WebApi
Я хочу создать некоторые функции в ASP.NET Web API, который должен выполняться ежедневно в определенное время и выполнять определенную задачу, такую как статусы обновлений/записи/генерации писем, SMS.
Должен ли я создать TaskService в коде
using System;
using Microsoft.Win32.TaskScheduler;
class Program
{
static void Main(string[] args)
{
// Get the service on the local machine
using (TaskService ts = new TaskService())
{
// Create a new task definition and assign properties
TaskDefinition td = ts.NewTask();
td.RegistrationInfo.Description = "Does something";
// Create a trigger that will fire the task at this time every other day
td.Triggers.Add(new DailyTrigger { DaysInterval = 2 });
// Create an action that will launch Notepad whenever the trigger fires
td.Actions.Add(new ExecAction("notepad.exe", "c:\\test.log", null));
// Register the task in the root folder
ts.RootFolder.RegisterTaskDefinition(@"Test", td);
// Remove the task we just created
ts.RootFolder.DeleteTask("Test");
}
}
}
или я должен создать файл .bat и создать новую задачу в планировщике задач.
Ответы
Ответ 1
Как вы уже упоминали в вопросе, вам необходимо выполнить определенные задачи, такие как статусы обновлений/записи/генерации писем, SMS и т.д.
Таким образом, доступ к базе данных приходит в сценарий, а с другой стороны, вам придется отправлять электронные письма и SMS, которые могут потребовать сторонние библиотеки или другой доступ к настройкам конфигурации.
Таким образом, чтобы сделать все это , лучше идти с реализацией кода, благодаря которой вы можете достаточно хорошо поддерживать свои изменения и требования.
О ".bat файле и планировщике окон" вам нужно иметь отличные навыки, используя ограниченные командные команды, доступные для выполнения вашего требования.
Итак, мое предложение - это задача с кодом,.exe и планировщиком окон.
Кроме того, это должно быть отдельное приложение, не смешивайте его с кодом Web API. Вы всегда можете создать новый проект в решении веб-API с проектом веб-API и повторно использовать любой код.
Ответ 2
Вы должны сделать это за пределами своего веб-кода. Это связано с тем, что ваш webapp не должен иметь доступа к системе задач или веб-службе. По умолчанию IIS 7.5+ запускает приложение в своей учетной записи с ограниченным доступом (https://www.iis.net/learn/manage/configuring-security/application-pool-identities).
Ответ 3
Я рекомендую вам попробовать Hangfire. Это бесплатно, и вы можете использовать его бесплатно в коммерческом приложении. Ducumentation вы можете найти здесь.
Ответ 4
Если вы хотите иметь надежное планирование задач, в котором вы можете применить временной интервал, зависит от вашего выбора, я рекомендую [кварц]: https://www.quartz-scheduler.net/. Кварц позволяет добавлять/редактировать/удалять/etc запланированное задание легко, управляемо и без накладных расходов CPU.
Кроме того, Quartz - это система планирования вакансий с открытым исходным кодом, которая может использоваться от небольших приложений до крупных корпоративных систем.