【问题标题】:Quartz.NET: in the Asp.Net Web vs Console ApplicationQuartz.NET:在 Asp.Net Web 与控制台应用程序中
【发布时间】:2015-06-16 18:48:17
【问题描述】:

我需要运行 4 个后台 gob 来清理临时文件和处理一些文件。 我选择了 Quart.net

我有一个 Asp.Net 网站,它接受上传将由 Quartz Jobs 在晚上处理的文件。

首先我想为 Quartz 作业制作一个控制台应用程序,使网站和作业完全分离。

但是,我发现我需要一些位于 asp.net web.config 上的配置值(连接字符串和文件路径)。于是我想到了一个问题:

我应该通过 asp.net 实例运行作业还是应该在控制台应用程序上执行此操作?

此外,我希望当 Quartz 作业开始运行时,网站会显示一个特殊页面(例如“我们正在处理文件...)。

我最关心的是性能,我不希望网站受到Quartz作业的影响,也不希望网站影响作业的性能。

那么,我该怎么办?你有没有做过这样的事情,可以给我一个建议吗?

【问题讨论】:

  • 你可以创建一个windows服务,让windows服务运行quartz作业。当石英作业正在运行时,您可以将一个标志存储在一个表中,表明该石英作业正在运行,并且在您的 asp.net 页面中,只需读取该标志并显示一个页面,如果该标志是,则说明该作业正在运行真的。您可以使用 jquery ajax 来检查标志。

标签: asp.net .net quartz-scheduler quartz.net


【解决方案1】:

我应该通过 asp.net 实例运行作业还是应该在控制台应用程序上执行此操作?

如果您想每晚手动触发它们,当然可以。但是使用主机系统的任务调度程序的控制台应用程序似乎是一种更加自动化的解决方案。 Web 应用程序更像是一个请求/响应系统,它并不真正适合定期或长时间运行的操作。在主机上调度某种后台操作,例如调度的控制台应用程序或 Windows 服务,会更好地达到此目的。

请注意,如果它确实需要无人值守并在没有人登录服务器控制台的情况下运行,Windows 服务可能是比控制台应用程序更理想的方法。

我已经看到我需要一些在 asp.net web.config 上的配置值(连接字符串和文件路径)

控制台应用程序有App.config 用于相同目的的文件。你可以使用它。

我希望当 Quartz 作业开始运行时,网站会显示一个特殊页面

您肯定希望将两者分离。但是你可能很容易做到这一点。可能在数据库中有某种状态标志,指示是否有任何特定记录“当前正在处理”。当页面加载并显示该消息时,网站可以简单地查找带有该标志的任何记录。

这里可能有几种不同的方式来同步状态,你选择什么并不重要。重要的是系统保持解耦,并且任何静态持久的状态都经过谨慎处理,以避免错误的进程留下不正确的状态。 (例如,后台任务设置为“处理”状态,然后以某种方式失败。网站将永远指示它正在处理。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-11-21
    • 1970-01-01
    • 2010-11-04
    • 2018-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多