在 ASP.NET MVC 网站中运行计划任务

Posted

技术标签:

【中文标题】在 ASP.NET MVC 网站中运行计划任务【英文标题】:Running a scheduled task in an ASP.NET MVC website 【发布时间】:2016-05-02 08:24:39 【问题描述】:

我正在制定一个网站的架构,我遇到了一些我以前从未使用 ASP.NET 做过的事情。我想做的是每晚对数据库表中的实体运行查询,以检查日期列并执行 X 或 Y 操作,具体取决于日期。基本上我希望每晚调用一次函数。我搜索的所有内容都将我引向了几个不同的方向,这些方向对于这样一个简单的操作来说似乎非常复杂,或者更倾向于工作排队,这并不是我想要的。

欢迎任何建议,只是寻找最简单的方法。谢谢!

【问题讨论】:

糟糕的解决方案(不要使用它):在控制器中创建一个操作来完成这项工作,然后在 power-shell 中编写一个简单的 get,在任务调度器中运行脚本......但我不推荐它,更好的解决方案是使用作为 fe 运行的 fe Quartz.net作为 Windows 服务。 Sql Server 有可以安排的任务。我建议在那里做。 您在哪里托管您的应用程序。如果您使用的是 Azure Web 应用程序(我强烈推荐这个),您可以轻松地将 Web 作业附加到您的应用程序,可以轻松地安排在给定的时间间隔运行 @JesseCarter 我们不使用 Azure,我们托管自己的服务器。 how to schedule a task in MVC4 C#?的可能重复 【参考方案1】:

我以前在一个项目中使用过Hangfire 来做这样的事情。我强烈推荐,它绝对棒极了,并将您的所有代码保存在一个解决方案中(不要乱用 Windows 服务)。

【讨论】:

【参考方案2】:

我能想到三种不同的选择。

    如果您正在做的工作纯粹是与数据库相关的,那么大多数数据库平台(如 Microsoft SQL Server、Oracle 等)都可以定期运行schedule jobs。这些作业可以是 SQL 语句或存储过程。 MS SQL Server 还允许您从存储过程中调用 C# 代码,这很方便。

    使用操作系统进行调度。 Windows 有 Windows Scheduler 作业(AT 命令),Unix 有 cron 作业。您可以安排一个可执行文件每晚运行,它会运行 C# 代码或 SQL 代码。

    编写您自己的调度服务。该服务将始终作为 Windows 服务运行,并定期执行一些代码。查看诸如Quartz.net 之类的调度框架,它可以帮助组织一些调度细节。

【讨论】:

我同意:Web 服务器的工作是接收 http 请求并返回 http 响应。如果您想将其用作作业调度程序,您可以找到一种偷偷摸摸的方法来做到这一点,但是……您会做错的。为工作使用正确的工具。 ASP.NET MVC(就像在 Web 服务器中运行的所有东西一样)不是。 我所做的大部分工作是想检查一个名为 finish_date 的列,看看它是否接近一年。从一岁开始一周后,给所有者发电子邮件并说除非它被更新,否则它将被删除。然后在其“生日”时,将其删除。不确定您使用数据库的第一个建议是否适用,我宁愿避免使用 Windows 调度程序。 @Chiggins - 您可以在存储过程中实现所有这些。 SQL Server 可以使用sp_send_dbmail sproc 发送电子邮件。其余的只是基本逻辑。然后使用代理来安排。

以上是关于在 ASP.NET MVC 网站中运行计划任务的主要内容,如果未能解决你的问题,请参考以下文章

在asp.net mvc 3中的后台作业/计划任务中发送电子邮件

ASP.NET:计划任务

计划任务:服务/DLL/控制台应用程序

Asp.net mvc + Redis

使用 Web 应用程序进行计划任务的最佳方法 [重复]

您如何处理在 IIS 上运行的网站的计划任务?