【问题标题】:Where to put the custom job assembly?将自定义作业程序集放在哪里?
【发布时间】:2014-10-22 02:41:37
【问题描述】:

我希望我的调度程序运行我定义的自定义作业。让我们说这项工作与 Quartz.Net 文档所举例说明的相同:

IJobDetail job = JobBuilder.Create<HelloJob>()
    .WithIdentity("myJob", "group1")
    .Build();

我已经有了工作类的代码。我将 Quartz.Net 作为 Windows 服务运行。我已经将我的工作类添加到我的 Quartz 服务器并且它可以识别它。但我正在从一个单独的应用程序控制我的服务器。这意味着我使用GetScheduler() 来获取服务实例,然后想从中添加和删除HelloJobs。我是否需要创建作业程序集并将其也放入我的 Windows 应用程序的 bin 文件夹中?

这样做的不利方面是,每次我对工作进行小改动时,我都必须为其创建一个新的 DLL 并将其放置在我的调用应用程序中。

有没有办法避免每次为我的 Windows 应用程序创建 DLL

【问题讨论】:

    标签: c# .net windows-services quartz.net job-scheduling


    【解决方案1】:

    深入研究源代码后,看起来应用确实需要知道作业类型,这也需要实现 IJob(您可能已经知道这一点)。 JobBuilder 有默认构造函数,但它所做的只是创建一个空实例。

    我认为这没有什么问题,因为您可以轻松地在 Windows 服务的单独程序集上完成工作,并在服务和 Windows 应用程序上添加对它们的引用。由于该应用只需要作业类型的名称,因此您无需重新部署/对其进行任何更改除非类型名称发生更改。

    【讨论】:

    • 不,我认为没有必要,正如我所说,我想避免它。但是如果我要在我的应用程序上创建一个新的 HelloJob,我的应用程序如何知道 HelloJob 是什么?我的意思是我们两个代码的第一行?
    • 您无法像这样创建新的 HelloJob。我假设您想这样做,以便可以将设置传递给 HelloJob?
    • 我不太明白“将设置传递给 HelloJob”。那么如何在我的应用程序上创建 HelloJob 呢?我的意思当然是最简单的方法。
    • 我应该在我的服务上添加 JobListeners 和 TriggerListeners 吗?
    • 这些通常用于跟踪作业/触发器状态。已启动/已完成等。如果您的服务上有一个名为 HelloJob 的程序集,并希望从您的 Windows 应用程序向它提供输入,那么您通常会从调度程序中将其作为作业检索,如上所示(假设它存在于您的作业商店中)然后使用作业上的 JobDataMap 属性来提供输入(我所说的设置)。这是您的应用程序对这项工作的唯一概念。
    猜你喜欢
    • 2021-12-18
    • 2012-03-24
    • 1970-01-01
    • 1970-01-01
    • 2010-12-27
    • 2012-11-02
    • 2023-03-22
    • 2012-06-08
    • 1970-01-01
    相关资源
    最近更新 更多