Closed. This question is opinion-based。它当前不接受答案。                                                                                                                                                                                                                                                                                                                        想改善这个问题吗?更新问题,以便editing this post用事实和引用来回答。                                                5年前关闭。                                                                                                                    民间,我们最近刚刚启动了一个调查应用程序,它的MVC使用LINQ to实体。我们有一个SurveyStatus表。我们希望每个星期一运行一个自动查询,以检查调查是否完成。如果调查完成,则发送电子邮件通知用户。以前,我们是使用计划任务执行此操作的,该任务运行了VB脚本以链接到数据库。但是,现在我们想在项目中创建此EmailService,以获取模型和那里已有服务的优势。谁能给我一些关于实现此目标的最佳方法的建议?提前致谢 最佳答案 请查看Revalee开源项目。Revalee是一项服务,使您可以计划对ASP.NET MVC应用程序的Web回调。 Revalee使用Windows服务管理任务的持久性和计划,但利用ASP.NET MVC应用程序来处理处理工作(即“工作”)。以下是使用Revalee的MVC应用程序的工作流程:(来源:sageanalytic.com)在您的情况下,您将安排将来的回调(在用户提交调查时),以触发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);}48小时后调用MVC应用程序时,您的SurveyController将使用以下Inspect操作处理回调:[AllowAnonymous][CallbackAction]public ActionResult Inspect(int surveyId){ // TODO Lookup the survey's information and perform the necessary review // ... return new EmptyResult();}当然,如果您当前的处理工作流程无法从每周一次的每周一次更改为提交调查后的+48小时,那么Revalee仍可用于安排该任务。您的callbackUrl就是:Uri callbackUrl = new Uri("http://mywebapp.com/Survey/InspectAll");我希望这有帮助。祝好运!免责声明:我是参与Revalee项目的开发人员之一。不过要明确一点,Revalee是免费的开源软件。源代码在GitHub上可用。
09-28 00:08