【问题标题】:Scheduling job idea needed by the web application in asp.net在 asp.net 中调度 Web 应用程序所需的工作想法
【发布时间】:2013-03-06 19:53:12
【问题描述】:

我在 asp.net 中编写了一个 Web 应用程序。它有一些用户角色。有3个角色,即经理,会计和员工。员工在表格中写下他们的费用并将其发送给经理。经经理批准后,将其发送给会计师支付。我需要有一个想法,当经理在 48 小时内没有批准员工的费用时,它应该向经理的邮箱发送一封自动电子邮件。

我认为我可以编写另一个小型控制台应用程序来处理这个问题,每小时检查一次。但这会浪费资源并降低性能。

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

【问题讨论】:

    标签: c# asp.net scheduled-tasks console-application


    【解决方案1】:

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

    控制台应用程序和调度程序

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

    查看Microsoft link 了解如何在 Windows 中创建计划任务。

    Restful Web 服务和调度程序

    正如@marapet 回答中所建议的那样,拥有一个允许您执行此操作而不是控制台应用程序的宁静 Web 服务将为您提供将所有代码都包含在您的 Web 应用程序中的优势。

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

    Windows 服务

    另一种选择是创建一个始终运行的 Windows 服务,并检查时间本身,以便每小时执行一次工作(可能使用 Quartz 或类似工具)。但这不符合您的性能要求。

    对性能的影响很小,因为您的服务应该每分钟检查一次,看看是否已经过了一个小时,是时候完成它的工作了。这项任务非常简单。

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

    数据库作业

    还有另一种选择...如果您的应用程序使用 SQL Server,您可以拥有每天或每小时运行的 t-sql 作业。除非您确实遇到性能问题,否则我不会推荐此选项。

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

    【讨论】:

    • +1,我认为每天运行一次控制台应用程序就足够了
    【解决方案2】:

    如果您希望将逻辑保留在 Web 应用程序中以简单起见(取决于您的解决方案的总规模,这可能需要也可能不需要):

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

    您可以使用简单的 VBScript(或 wget、或 curl、或 powershell 或任何对您来说最快的方式)调用 URL,然后您可以使用任务调度程序(@987654324 @)。

    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
    

    【讨论】:

    • +1 将所有逻辑放在网络应用程序中是个好主意
    • 也许谁对你投了反对票,因为你的代码是 vb.net 并且问题在 C#..
    • 好吧,以防万一,我添加了一些链接和建议,以了解其他调用 URL 的方式。使用 VbScript 当然不是我回答的核心......
    【解决方案3】:

    每小时检查一次不会影响性能。根据您的数据库,即使每分钟检查一次也可能没问题。最简单的选项是作为计划任务触发的控制台程序。您也可以尝试 Windows 服务,但它们有点棘手。

    还要考虑一下如何计算 48 小时。如果员工在周末之前投入费用,那么每次可能都会过去 48 小时,而您最终会遇到经理在周一早上的收件箱中收到大量电子邮件。这可能会引起一些摩擦:)

    【讨论】:

    • 我们将计划任务与 .NET 控制台应用程序一起使用:非常舒适。
    猜你喜欢
    • 1970-01-01
    • 2010-10-21
    • 2013-06-22
    • 1970-01-01
    • 1970-01-01
    • 2013-03-16
    • 1970-01-01
    • 1970-01-01
    • 2019-06-25
    相关资源
    最近更新 更多