請看看Revalee開源項目。
Revalee是一項服務,它允許您爲您的ASP.NET MVC應用程序安排Web回調。 Revalee使用Windows服務管理任務持久性和調度,但利用ASP.NET MVC應用程序處理處理工作(即「工作」)。
下面是使用Revalee MVC應用程序的工作流程:
Revalee Workflow http://revalee.sageanalytic.com/Images/workflow.png
在你的情況,你會計劃將來回調(當用戶提交的調查)來觸發一個動作你將檢查您的調查結果的MVC應用程序。然後,檢查的結果將觸發(或不)將隨後的電子郵件消息發送給用戶。
<編輯>
別的東西來考慮......
你可能想改變你接近你的問題域的方式。 「每個星期一」(即執行一個可同時測試所有調查的流程)不是安排固定任務,而是反覆處理:單獨處理每項調查。可以理解的是,沒有像Revalee這樣的回調解決方案,這是有問題的。但是,對於Revalee,您可以安排每位用戶的調查在提交後處理+48小時(例如)。這做了兩兩件事:
它改變了調查檢查「工作」從測試所有調查來測試的調查。
它在一週的所有日子(以及一天中的幾小時)內展開檢查處理。也就是說,它不再侷限於在每個星期一準確處理,比如早上8點。
要註冊使用Revalee更個性化的回調,你可能會註冊一個這樣的未來回調:
private void ScheduleSurveyInspection(int surveyId)
{
// The callback will be 48 hours from now
DateTimeOffset callbackTime = DateTimeOffset.Now.AddHours(48.0);
// The callback URL will include the ID of the survey to be reviewed
Uri callbackUrl = new Uri(
string.Format(
"http://mywebapp.com/Survey/Inspect/{0}",
surveyId
)
);
// Register the callback request with the Revalee service
RevaleeRegistrar.ScheduleCallback(callbackTime, callbackUrl);
}
當你的MVC應用程序在48小時後打電話回來,你SurveyController
將使用處理回調以下Inspect
行動:
[AllowAnonymous]
[CallbackAction]
public ActionResult Inspect(int surveyId)
{
// TODO Lookup the survey's information and perform the necessary review
// ...
return new EmptyResult();
}
當然,如果你目前的處理流程不能發生一次我們改變ek每星期一發生在調查提交後的+48小時後,然後Revalee仍可用於安排該任務。你callbackUrl
將僅僅是:
Uri callbackUrl = new Uri("http://mywebapp.com/Survey/InspectAll");
< /編輯>
我希望這有助於。祝你好運!
聲明:我是參與Revalee項目的開發人員之一。然而,要清楚的是,Revalee是免費的開源軟件。源代碼可在GitHub上獲得。
[HangFire](https://github.com/HangfireIO/Hangfire)寧願爲此而搖滾。 –
爲什麼不使用預定的PowerShell腳本來完成這項工作,並使用.Net代碼的副本? – ThatBlairGuy