まあ、私は最終的に外部プロセスにタスク/ジョブを実行するためのシステムを導入しました。
誰かが、私はそれを実装方法を知りたい場合は、ここでは詳細の一部です。たぶん私は解決策とソースコードを共有する記事を書くだろう。
基本的に、我々は二つの成分、Web.dll
(ASP.NETアプリケーション)とWeb.dll
でTaskExecutor.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)
メソッドに渡されます。私はドキュメントを読んでいる
...クォーツは、別のプロセスでジョブを実行することはできますか? –
@Daniel、Quartzがジョブを実行すると、それらのジョブはプロセスを起動できます: 'Process.Start(" foo.exe ");'。 –