我需要在我的Web服務器來執行一些活動/工作,如索引的一些信息,組織一些文件,並計算一些統計數據...實現作業調度的ASP.NET MVC
我想在我的Web服務器中保留QoS(性能,內存消耗......)。所以我在考慮執行這些活動的外部進程,而不是調用一個線程。類似於Apache MPM processer(它啓動子進程來處理請求)。
- 要知道任何最好的解決方案嗎?
- 你知道任何圖書館可以爲我做這個嗎?
謝謝先進。
我需要在我的Web服務器來執行一些活動/工作,如索引的一些信息,組織一些文件,並計算一些統計數據...實現作業調度的ASP.NET MVC
我想在我的Web服務器中保留QoS(性能,內存消耗......)。所以我在考慮執行這些活動的外部進程,而不是調用一個線程。類似於Apache MPM processer(它啓動子進程來處理請求)。
謝謝先進。
好了,我終於實現了一個系統中的外部進程來執行任務/作業。
如果有人想知道我是如何實現它的,下面是一些細節。也許我會寫一篇文章來分享解決方案和源代碼。
基本上,我們有兩個組件,所述Web.dll
(ASP.NET應用程序)和被叫TaskExecutor.exe
在Web.dll
程序,有一個活動調度器,它可以通過名稱註冊任務:例如:
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)
方法傳遞,就像程序做的一樣。
您可以看看Quartz.NET,它允許您安排將在服務器上運行的作業。
你能做些像他們在堆棧交換網站上使用的東西嗎?
http://blog.stackoverflow.com/2008/07/easy-background-tasks-in-aspnet/
我正在閱讀文檔... Quartz可以在單獨的進程中執行作業嗎? – 2010-11-24 08:22:40
@Daniel,Quartz執行作業,那些作業可以產生進程:`Process.Start(「foo.exe」);`。 – 2010-11-24 08:25:49