【问题标题】:Running Tasks When Specified Time Passes the Stored Dates (ASP.NET MVC)当指定时间超过存储日期时运行任务 (ASP.NET MVC)
【发布时间】:2015-07-27 16:12:16
【问题描述】:

我有一个使用 SQL Server 作为数据库的 ASP.NET MVC Web 应用程序。该应用程序使用“作业”作为基础实体,每个作业都有多个日期,例如创建日期、批准日期、交货日期等。

我正在寻找以下场景的最佳实践:例如,当存储的创建日期过去了 3 天,并且提案没有得到答复时,应该重新发送提案。如何在不使用任何 Windows 服务的情况下完成此操作?

【问题讨论】:

  • without using any Windows services。为什么?这是一个相当简单和可靠的选择。想到的唯一其他可靠选项是使用任务调度程序。这两个选项都不适用于您无法访问操作系统的托管环境。
  • 我需要一个不使用任何 Windows 服务的解决方案,因为我们的 Web 应用程序在托管环境中运行。

标签: sql-server asp.net-mvc asp.net-mvc-4 scheduled-tasks


【解决方案1】:

您可以通过多种方式安排任务:

如果这些都不起作用,您可以安装任意数量的cron(8) ports/clones/workalikes 之一:

但所有这些调度程序所做的只是启动一项工作。由您来编写工作以实际完成工作。在你的例子中,

例如当存储的创建日期过去 3 天时, 提案未得到答复,应重新发送提案。

您将不得不纠正一些事情——一个存储过程、一个控制台应用程序、一个 powershell 脚本等——它知道如何找到已经搁置了三天而没有答案的提案。然后它需要重新发送每个提案。您可能需要以某种方式将它们标记为重新发送等。

调度程序所做的只是启动工作。为此,这项工作可能只需要每天运行一次,对吧?这是最简单的部分。

【讨论】:

  • 实际上,我需要一个解决方案,当它自创建日期恰好 3 天后再次发送提案。但我想,我需要一个解决方案来每分钟或每秒检查每项工作,这听起来既不可能也不合理。我不知道。
  • 为什么不呢?任务调度程序或 cron 的问题在于,当调度程序事件触发时,它会产生一个新进程。服务会是更好的选择——并且用 C# 编写它们并不难:见walk-through on MSDN。您在OnStart 事件中所做的就是创建一个计时器,该计时器会触发您想要轮询的频率。然后计时器滴答处理程序需要执行实际工作。
  • 感谢 Nicholas,但我们的应用程序在托管环境中运行。对托管环境有什么建议吗?
猜你喜欢
  • 2023-03-21
  • 2015-08-16
  • 1970-01-01
  • 2018-09-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-19
相关资源
最近更新 更多