2010-11-24 215 views
1

のためのジョブスケジューラの実装しますWebサーバーのQoS(パフォーマンス、メモリ消費など)を維持します。だから私はの外部プロセスを実行すると考えていますスレッドの代わりに、これらの活動のために。 Apache MPM processerと似たようなものです(要求を処理するために子プロセスを起動します)。は</p> <p>私が欲しい...私は、このような、いくつかの情報をインデックスいくつかのファイルを整理し、いくつかの統計情報を計算するように、私のWebサーバーに/ジョブ</strong>一部<strong>活動を実行する必要がASP.NET MVC

  • これを行うには、任意の最適なソリューションを知っていますか?
  • 私のためにこれを行うことができるライブラリを知っていますか?高度で

感謝。

答えて

1

まあ、私は最終的に外部プロセスにタスク/ジョブを実行するためのシステムを導入しました。

誰かが、私はそれを実装方法を知りたい場合は、ここでは詳細の一部です。たぶん私は解決策とソースコードを共有する記事を書くだろう。

基本的に、我々は二つの成分、Web.dll(ASP.NETアプリケーション)とWeb.dllTaskExecutor.exe

と呼ばれるプログラムを持って、名前でタスクを登録することができ、活動スケジューラがある:例えば:

ActivityScheduler.Get().RegisterActivity("GenerateSearchIndexes", 4 * 1000 * 60 * 60); //each 2 hours 

活性スケジューラがスレッドで各アクティビティを実行し、このスレッドは、外部プロセスを呼び出し、ActivityExecutor.exe

このアセンブリへの参照を持っていますWeb.dllにはアクティビティを取得する静的ActivityFactoryがあります。あなたはここに制限を推測することができたよう

public static void Main (string[] args) 
{ 
    try 
    { 
     if (args.Length == 0) 
     { 
      throw new ArgumentException("No activity name given", "ActivityName"); 
     } 
     //parameter 0 is the activity name 
     string activityName = args[0]; 
     IScheduledActivity activity = ActivityFactory.GetActivity(activityName); 

     if (activityName != null) 
     { 
      activity.Execute(args); 
     } 
    } 
    catch (Exception ex) 
    { 
     Console.WriteLine("Error executing activity: " + ex.Message); 
    } 
} 

活動を静的に定義されなければならないということですので、彼らはそのコンストラクタでparamentersを受け取ることができません:外部プロセスのソースコードは非常に簡単です。プログラムが行うのと同じ方法で、IScheduledActivity.Schedule(string[] args)メソッドに渡されます。私はドキュメントを読んでいる

1

あなたがサーバー上で実行されるジョブをスケジュールすることができますQuartz.NETを見てみましょうことがあります。彼らはスタックExchangeサイトで使用のよう

+0

...クォーツは、別のプロセスでジョブを実行することはできますか? –

+0

@Daniel、Quartzがジョブを実行すると、それらのジョブはプロセスを起動できます: 'Process.Start(" foo.exe ");'。 –