Планировщик задач 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 - это система планирования вакансий с открытым исходным кодом, которая может использоваться от небольших приложений до крупных корпоративных систем.