2012-03-24 8 views
1

ASP.MVCアプリケーションをバックグラウンドタスクのスケジューラとして機能させたい。 HttpApplication-サブクラス化クラスには、次のコードがあります。またASP.NETでSystem.Threading.TimerまたはQuartzを使用

public class MvcApplication : System.Web.HttpApplication 
{ 
    private Timer Timer; 
    protected void Application_Start() 
    { 
     if (Timer == null) 
     { 
      TimerCallback cb = OnTimerElapsed; 
      AutoResetEvent autoEvent = new AutoResetEvent(false); 
      Timer = new Timer(cb, autoEvent, INITIAL_DELAY, TIMER_INTERVAL); 
     } 
    } 

    private void OnTimerElapsed(Object stateInfo) 
    { 
     //perform background task 
    } 
} 

、代わりにSystem.Threading.Timerを使用するのを、私はまた、クォーツ、同等のコードでそれを置き換える、それはまたしばらく後に発射を停止します。

これで、Application_Start()が適切な場所になっているのか、それとも良い場所があるのでしょうか?

タイマーとクォーツの両方のアプローチが有効です。しかし、Quartzでは、20分(20分)後に1分の間隔のように見えますが、トリガはもう起動しません。タイマーでは、トリガが発射を停止する間隔がいくつあるかはわかりません。

+0

なぜQuarzをcronトリガーで使用していないのですか? –

答えて

0

ASP.Netは長時間実行されているプロセスや定期的に実行されているプロセスのためのプラットフォームではありませんが、具体的にはなぜタイマーが起動を停止するのかはわかりません。

しかし、ここで彼のアプローチを概説し、ほぼ同じことを達成したかった誰かによってポストです:

http://www.west-wind.com/weblog/posts/2007/May/10/Forcing-an-ASPNET-Application-to-stay-alive

1

が(注:私は、これは仕方遅く、この答えでリリースするが、この上でつまずき誰のため私の2セントは下にあります)

20分の理由はiisアイドルタイムアウトのように聞こえます...デフォルトは20分です。

アプリケーションプールのアイドルタイムアウト(詳細設定)を20から0に変更してみてください。私が使用していたキューに関する問題も同様でした。この変更により、アプリが起動してタイマーが実行されるはずです。

関連する問題