2016-03-04 44 views
0

在C#/ asp.net應用程序我尋找一種方式來安排作業執行一次,在特定的時間點。例如。於2016年2月4日02:00。那就是:如何安排批處理作業在特定時間點運行?

  1. 是否有任何框架可以做到這一點(調度作業在特定的時間點執行)?我知道來自IBM的Tivoli Workload Scheduler,但看起來相當老舊和昂貴。

  2. 如果框架想出了一個網絡信息中心允許工作管理員管理(日程安排和概述)工作我有些日曆一樣的顯示這將是很好。

回答

2

Hangfire不正是你想要的東西通過傳遞一個DateTime值到時間表方法:

BackgroundJob.Schedule(yourMethodCall, new DateTime(2015, 03, 07, 12, 00, 00)) 

配備了一個很好的web前端太:)

+0

不,不。 Hangfire支持重複和延遲作業,但不支持時間點計劃。可以將延遲設置爲現在和期望的執行時間之間的差異,但這是一種破解。 – someName

+0

是可能的日期時間值傳遞到'Schedule'方法也-'BackgroundJob.Schedule(包括MethodCall,新的日期時間(2016,03,07,12,00,00))' – LDJ

+0

對不起,你是對的。確實有可能在固定的日期安排工作。就是沒有基於網絡管理員界面,允許在日曆視圖中查看計劃的任務,特別是允許管理員用戶可以從該接口調度作業。這將是一個很好的功能。 – someName

0

如果您在基於Windows的服務器上運行,那麼你可以使用Revalee開源項目來解決這個問題。 Revalee,運行作爲Windows服務,存儲在持久性數據存儲的所有計劃任務(具體而言,可擴展存儲引擎(ESE)亦稱JET藍]),這樣你就不會失去狀態,即使整個服務器需要重新啓動。當您的任務到期時,Revalee會調用您的應用程序以觸發您需要運行的任何任務。

例如,從C#ASP.NET應用程序中,你會註冊一個回調Revalee像這樣(安裝&配置Revalee.Client包後):

private void ScheduleSendMessage() 
{ 
    // The callback time will be 4 Feb 2016 2:00 UTC (example assumes UTC) 
    DateTimeOffset callbackTime = new DateTimeOffset(2016, 2, 4, 2, 0, 0, 0, TimeSpan.Zero); 
    // The callback url is set (your send message code will reside there) 
    Uri callbackUrl = new Uri("http://mywebapp.com/SendMessage.aspx"); 
    // Register the callback request with the Revalee service 
    RevaleeRegistrar.ScheduleCallback(callbackTime, callbackUrl); 
} 
相關問題