调度作业的想法需要在asp.net的web应用程序

本文关键字:asp net 应用程序 web 调度作业 | 更新日期: 2023-09-27 18:04:23

我用asp.net编写了一个web应用程序。它有一些用户角色。有3个角色,分别是经理、会计和员工。员工们把他们的开支写在表格上,然后交给经理。当经理批准后,它将被发送给会计支付。我需要有一个想法,当经理在48小时内没有批准员工的费用时,应该自动发送电子邮件到经理的邮箱。

我想我可以写另一个小的控制台应用程序来处理每小时检查。但它会浪费资源并降低性能。

我需要一个好主意来处理这件事。我该怎么办?

调度作业的想法需要在asp.net的web应用程序

有几个选项,但如果我是你,我会选第一或第二个选项。

Console App &调度器

我将创建控制台应用程序,每次运行时都为您执行检查。然后我将使用Windows Scheduler在每天(00:05)或每小时(如果你喜欢的话)运行它。这样,Windows Scheduler守护进程将每小时启动一次,其余时间你的应用程序不运行。

查看这个Microsoft链接,了解如何在windows中创建计划任务。

Restful Web Service &调度器

正如@marapet回答中建议的那样,使用一个rest式的web服务来允许你执行这个操作,而不是一个控制台应用程序,这会给你带来所有代码都在web应用程序中的优势。

与前一个类似,您应该只调用restful uri来完成操作。作为可能的缺点,您必须确保最终用户无法访问该uri。在通常的架构(Web Server -> Application Server -> DB)中,这个restful服务应该位于应用服务器中,远离最终用户访问。

Windows服务

另一个选择是创建一个Windows服务,它一直运行并检查时间本身,以便每小时执行任务(可能使用Quartz或类似)。但这不能满足您的性能要求。

性能的影响将是很小的无论如何,你的服务应该每分钟检查一次,看看一个小时是否已经过去,是时候做它的工作了。这个任务很简单。

优点是windows服务比计划任务更容易控制和监视

<<p> DB工作/strong>

还有一个选择…如果你的应用使用SQL Server,你可以有一个每天或每小时运行的t-sql作业。除非您确实存在性能问题,否则我不推荐使用此选项。

这里的问题是,您将拆分代码的逻辑和职责。未来的开发者或管理员会发现很难维护你的应用。

如果您希望将逻辑保留在web应用程序中以简化(取决于您的解决方案的总大小,这可能是也可能不是理想的):

  • 对于给定的URL,让web应用程序检查适当的批准并在需要时发送电子邮件。一定要跟踪发送的邮件,以防止多次发送相同的邮件。
  • 定期调用此URL。您可以使用定时任务第三方url监控服务来完成此操作。

你可以用一个简单的VBScript(或者wget, curl, powershell,或者任何对你来说最快的)来调用URL,然后你可以使用任务调度程序来自动执行。

示例脚本在vbscript调用URL:

Function LoadUrl(url)
    Dim objRequest
    Set objRequest = CreateObject("MSXML2.ServerXMLHTTP.6.0")
    objRequest.open "POST", url , false
    objRequest.Send
    LoadUrl = objRequest.responseText
    Set objRequest = Nothing
End Function

每小时检查一次不会影响性能。甚至每分钟检查一次也可以,这取决于您的数据库。最简单的选择是将控制台程序作为计划任务启动。你也可以尝试Windows服务,但他们有点棘手。

也考虑一下你将如何计算48小时。如果一名员工在周末之前就把费用入账,那么每次48小时都可能过去,你最终会发现,周一早上经理的收件箱里有很多邮件。这可能会引起一些摩擦:)