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ファイルを作成して、タスクスケジューラで新しいタスクを作成する必要があります。
質問で述べたように、ステータスの更新/記録/電子メールの生成、SMSなど)などの特定のタスクを実行する必要があります。
そのため、データベースアクセスがシナリオに入りますが、一方で、サードパーティのライブラリまたはその他の構成設定アクセスを必要とする可能性のある電子メールとSMSを送信する必要があります。
したがって、これをすべて行うにはコード実装を使用する方が良いでしょうこれを介して、変更と要件を十分に維持できます。
「.batファイルとWindowsスケジューラ」については、要件を満たすために利用できる限られたバッチコマンドを使用する優れたスキルが必要です。
つまり、私の提案は、コード、.exe、およびWindowsスケジューラタスクです。
また、これは別のアプリケーションである必要があります。WebAPIコードと混同しないでください。 WebAPIプロジェクトを使用してWebAPIソリューションでいつでも新しいプロジェクトを作成し、可能なコードを再利用できます。
これは、Webコードの外部で行う必要があります。これは、WebアプリがタスクシステムまたはWebサービスにアクセスできないようにする必要があるためです。デフォルトではIIS 7.5+は独自の制限付きユーザーアカウントでアプリを実行します( https://www.iis.net/learn/manage/configuring-security/application-pool-identities )。
選択に応じて時間間隔を適用できる信頼性の高いタスクスケジューリングが必要な場合は、[quartz]をお勧めします: https://www.quartz-scheduler.net/ 。 Quartzを使用すると、スケジュールされたタスクを簡単に、管理しやすく、CPUオーバーヘッドなしで追加/編集/削除などできます。さらに、Quartzは、最小のアプリから大規模なエンタープライズシステムまで使用できるオープンソースのジョブスケジューリングシステムです。