Пожалуйста, взгляните на проект с открытым исходным кодом Revalee.
Revalee - это сервис, который позволяет планировать веб-обратные вызовы для вашего приложения ASP.NET MVC. Revalee управляет постоянством и планированием задач с использованием службы Windows, но использует приложение ASP.NET MVC для обработки усилий по обработке (т. Е. «Работа»).
Ниже приводится последовательность действий в приложении MVC, использующего Revalee:
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