以下を使用して時間ベースのジョブを実行することの利点/欠点は何ですか?
Windows サービス
個別のスレッド/タイマーを開始するための Application_BeginRequest。
asp.net Web アプリケーションのコンテキストでジョブを実行することの 1 つの欠点は、.net のリサイクル中に物事を再度セットアップする必要があることです。
以下を使用して時間ベースのジョブを実行することの利点/欠点は何ですか?
Windows サービス
個別のスレッド/タイマーを開始するための Application_BeginRequest。
asp.net Web アプリケーションのコンテキストでジョブを実行することの 1 つの欠点は、.net のリサイクル中に物事を再度セットアップする必要があることです。
私の考えでは、Web アプリで時間ベースの処理を行うメリットはありません。Windows サービスに直接アクセスします。プロセスは常に稼働している必要があります。
ASP.NET サイトは単純にアンロードされる可能性があり、誰かがブラウジングを開始した場合にのみ再び機能します。ライフサイクルはすべて間違っています。サービスよりもはるかに「途切れ途切れ」です。
最後に、サービスの作成はそれほど難しくありません。
サーバーへの管理アクセス権を持っている場合は、目的に応じて、Windows サービスまたはスケジュールされた SQL ジョブを実行します。
Web アプリケーションから独立してこれらのジョブを停止/開始し、ログに記録できると便利です。また、仕事に問題やエラーが発生した場合、ウェブサイトに悪影響を与える可能性があります。
最後に、リクエストごとにコードを実行してタイマーが経過したかどうかを確認するように Web アプリケーションに強制していますが、これは不要なオーバーヘッドです。
最初に言ったように、実装はジョブが何であるかによって異なります。多数のデータベース レコードを更新するだけの場合は、SQL Server でスケジュールされたジョブを使用します。ファイル I/O または外部サービスへのアクセスが必要な場合は、Windows サービスの方が適している可能性があります。
独自のスケジューリングとスレッド セーフを Windows サービスに組み込む必要があることに注意してください。別の方法として、コンソール アプリケーションを作成し、FireDaemonなどのアプリケーションをスケジューリングに使用することもできます。