在 C# .NET MVC 应用程序中执行计划任务
Preforming scheduled tasks in C# .NET MVC Application
我正在尝试为我的 .NET MVC 应用程序实现一个逻辑,我将在以下基础上触发我的应用程序中的计划任务:
First scheduled task to run from 00 am to 1 am in the morning
Second scheduled task to run from 1:10 am to 08:00 am in the morning
Third scheduled task to run from 8:15 am to 11:15 pm every 1 hour
一年 365 天每天都会重复...
我可以使用 .NET 或外部库中的哪种机制以最简单的方式用很少的代码实现这一点?
我试图用 Quartz.NET 库来实现它,但我一点也不喜欢它,我有两个计划任务 运行ning,其中一个根本不会 运行在预定时间...
Visual Cron 是一个不错的任务计划程序,您可以使用。我们使用它,在我们的 asp.net / mvc / webapi 服务器上调用服务方法。
出于多种原因,您不希望在 Web 应用程序中执行长时间 运行 和重复出现的后台任务。您可以仔细阅读 following blog post
,其中很好地概述了它们。
我建议您将此逻辑移动到一个单独的 Windows 服务中,甚至是一个控制台应用程序,其运行可以使用 Windows 任务计划程序按所需的时间间隔安排。
这样做的好处是,您将 off-loading 您的 Web 应用程序不再执行长时间的 运行 任务,这些任务会消耗您的 Web 服务器的宝贵资源。当然,网络服务器和辅助服务可以共享一个公共的集中式数据存储或消息传递层,以便在必要时进行通信。
要在 ASP.NET MVC 中安排任务,您有多种选择:
- 第 3 方库,例如 FluentScheduler, HangFire or Quartz.net。
- 从 .Net 4.5.2 开始,就有了 QueueBackgroundWorkItem,这是一种在后台安排工作的本机方法。 Here is a guide on how to use it with ASP.NET MVC.
- 用于后台工作负载和计划任务的 Azure 服务。有几个针对不同的任务,here is an overview of them。
如果您尝试自己实施自定义解决方案,请小心,因为与请求无关的线程中的任何异常都会停止整个过程。
我的ASP.NET MVC App也遇到了类似的问题,想在特殊时期做一些工作,终于找到了办法。
我的解决方案是 Plesk 计划任务功能,因为大多数 windows 服务器使用 plesk 控制面板 您可以使用 plesk CP 在 windows 服务器上发布您的应用程序并在您的 MVC 应用程序中创建一个新的 actionresualt 并编写您的想要在特殊时期执行它们的代码。
通过 plesk scheduels tasks 创建一个新任务并使用您创建的 cron 调用您的 Url,您可以创建许多 cron。
如果我不能很好地解释它你可以在互联网上搜索Plesk Schedueled Tasks,你可以找到很多好的答案。
您可以通过多种方式创建计划任务。
1- 创建一个 WebApi 并在一段时间内通过本地控制台或 windows 服务应用程序调用它。
2- 如 Andreas 所说,使用 FluentScheduler、HangFire 或 Quartz.net 等第三方库。虽然它有其自身的副作用。
3- 如果在您的应用程序中使用 Sql 服务器,您可以为您的任务创建一个过程并将其放在 Sql 服务器中的作业上。如果在 Sql Server,
中启用了 CLR,您甚至可以将 C# 用于您的函数
如果我要选择,我会选择Sql个服务器作业。
我正在尝试为我的 .NET MVC 应用程序实现一个逻辑,我将在以下基础上触发我的应用程序中的计划任务:
First scheduled task to run from 00 am to 1 am in the morning
Second scheduled task to run from 1:10 am to 08:00 am in the morning
Third scheduled task to run from 8:15 am to 11:15 pm every 1 hour
一年 365 天每天都会重复...
我可以使用 .NET 或外部库中的哪种机制以最简单的方式用很少的代码实现这一点?
我试图用 Quartz.NET 库来实现它,但我一点也不喜欢它,我有两个计划任务 运行ning,其中一个根本不会 运行在预定时间...
Visual Cron 是一个不错的任务计划程序,您可以使用。我们使用它,在我们的 asp.net / mvc / webapi 服务器上调用服务方法。
出于多种原因,您不希望在 Web 应用程序中执行长时间 运行 和重复出现的后台任务。您可以仔细阅读 following blog post
,其中很好地概述了它们。
我建议您将此逻辑移动到一个单独的 Windows 服务中,甚至是一个控制台应用程序,其运行可以使用 Windows 任务计划程序按所需的时间间隔安排。
这样做的好处是,您将 off-loading 您的 Web 应用程序不再执行长时间的 运行 任务,这些任务会消耗您的 Web 服务器的宝贵资源。当然,网络服务器和辅助服务可以共享一个公共的集中式数据存储或消息传递层,以便在必要时进行通信。
要在 ASP.NET MVC 中安排任务,您有多种选择:
- 第 3 方库,例如 FluentScheduler, HangFire or Quartz.net。
- 从 .Net 4.5.2 开始,就有了 QueueBackgroundWorkItem,这是一种在后台安排工作的本机方法。 Here is a guide on how to use it with ASP.NET MVC.
- 用于后台工作负载和计划任务的 Azure 服务。有几个针对不同的任务,here is an overview of them。
如果您尝试自己实施自定义解决方案,请小心,因为与请求无关的线程中的任何异常都会停止整个过程。
我的ASP.NET MVC App也遇到了类似的问题,想在特殊时期做一些工作,终于找到了办法。 我的解决方案是 Plesk 计划任务功能,因为大多数 windows 服务器使用 plesk 控制面板 您可以使用 plesk CP 在 windows 服务器上发布您的应用程序并在您的 MVC 应用程序中创建一个新的 actionresualt 并编写您的想要在特殊时期执行它们的代码。 通过 plesk scheduels tasks 创建一个新任务并使用您创建的 cron 调用您的 Url,您可以创建许多 cron。 如果我不能很好地解释它你可以在互联网上搜索Plesk Schedueled Tasks,你可以找到很多好的答案。
您可以通过多种方式创建计划任务。
1- 创建一个 WebApi 并在一段时间内通过本地控制台或 windows 服务应用程序调用它。
2- 如 Andreas 所说,使用 FluentScheduler、HangFire 或 Quartz.net 等第三方库。虽然它有其自身的副作用。
3- 如果在您的应用程序中使用 Sql 服务器,您可以为您的任务创建一个过程并将其放在 Sql 服务器中的作业上。如果在 Sql Server,
中启用了 CLR,您甚至可以将 C# 用于您的函数如果我要选择,我会选择Sql个服务器作业。