時間のかかるスクリプト(サードパーティのAPIからデータベースを更新するため)を定期的に実行したいと思います。これのベストプラクティスは何でしょうか。
- 'スクリプト'は何である必要があります-ASP.NETサービス?私は共有ホスティングを利用していることを念頭に置いて、これは不可能かもしれません(しかし私は知りたいです)。
- スクリプトを定期的に/設定された時間に自動的に実行するようにスケジュールするにはどうすればよいですか?
前もって感謝します!
このためのいくつかのオプション:
これらのメソッドの詳細については、http://www.beansoftware.com/ASP.NET-Tutorials/Scheduled-Tasks.aspxを確認することをお勧めします。
たとえば、通常のIISセットアップで毎晩何かが実行されることを保証できる方法はありません。したがって、バッチジョブは処理するのが面倒です。IISの実行の唯一の「モード」は要求です。アプリケーションに要求がない場合、アプリケーションはまったく実行されないため、IISはアプリケーションでコードを実行するためにリソースを消費しません。つまり、アプリケーションを完全にアンロードできます。
独自のホストがある場合は、通常、バックグラウンドタスクを実行するためのWindowsサービスを作成します。Azureでも同じことが可能だと思います。ただし、標準の共有IISホストの場合、基本的に、スケジュールされたバックグラウンドタスクを設定することはできません。
最も単純なハックの1つは、リクエストを受け取ったときにジョブを実行する保護されたサービスをセットアップすることです。次に、外部の発信者が必要な間隔でサービスに電話をかけるようにすることができます。
あなたができることは、Global.asaxにSystem.Timers.Timerを追加することです。
System.Threading.Timer timer = new System.Threading.Timer(new TimerCallback(TimerElapsed), null, new Timespan(0), new Timespan(24, 0, 0));
// This will run every 24 hours.
private void TimerElapsed(object o)
{
// Do stuff.
}
IISManagerで、アプリケーションのHTTP-KeepAlivesを有効にします。
IISマネージャーで、[Http Response Headers Module]を選択して開き、[アクション]ペインで[Set Common Headers]を選択し、そこで[Enable HttpKeepAlives]を選択します。
また、アプリケーションプールの設定を確認してください-
アプリケーションのアプリケーションプールを選択し、右側の[アクション]タブから[詳細設定]を選択します。
そこには-アイドルタイムアウト(分)と呼ばれる設定があります
デフォルトでは20分です。60 Minutesのようにするか、さらに増やして確認します。