0

我目前正在进行一个项目,该项目是创建一个 Windows 服务,该服务实质上是围绕多个路径移动文件。一项工作可能是每 60 秒从 FTP 服务器获取与正则表达式匹配的所有文件并将它们传输到网络路径,等等。这些作业存储在 SQL 数据库中。

目前,该服务采用控制台应用程序的形式,以方便开发。作业是使用 ASP.NET 页面添加的,并且可以使用另一个 ASP.NET 页面进行编辑。

我有一些问题,一些与 Quartz.NET 和一些一般问题有关。

石英网:

1:这是我最大的问题。看到我暂时将应用程序开发为控制台应用程序,我不得不在我的所有文件/页面上创建一个新的 Quartz.NET 调度程序。这会导致多个令人困惑的错误,但我只是不知道如何在一个全局文件中启动调度程序,并在我的 ASP.NET 页面中访问这些(例如,我可以将详细信息放入网格视图进行编辑)

2:我的经理建议我可以考虑在 Quartz.NET 中拥有多个“配置”。我的意思是,在任何给定时间,管理员都可以更改应用程序配置,以便仅运行特定选择的应用程序。在 Quartz.NET 中最简单的方法是什么?

一般的:

1:在此应用程序中至关重要的一件事是确保文件已被移动并且它实际上在目标路径上(移动后原始文件被删除,因此如果文件没有被删除,那将是灾难性的实际上被复制了!)。我还需要确保文件内容与初始路径和目标路径匹配,以确保复制的内容是正确的。我目前正在通过 MD5 散列初始文件、复制文件并在删除它之前确保该文件存在于服务器上来执行此操作。然后我在服务器上散列文件并确保散列匹配。有没有更简单的方法来做到这一点?我担心散列可能会给系统带来压力。

2:这与上述问题有关,但并不重要,甚至我的经理也不知道我将如何做到这一点,但我很想实现这一点。如果在写入文件时执行作业会出现问题,这可能是一半写入的文件将被传输,从而使其完全无用,并且由于初始文件会被破坏而这也会很糟糕它正在被写入!有没有办法检查这个?

4

1 回答 1

2

正如您所发现的,在 ASP.NET 中运行 Quartz 调度程序会带来很多问题。查看 Marko Lahma 对有关在 ASP.NET Web 应用程序中运行调度程序的问题的回答:

Quartz.Net 调度程序在本地工作,但不在远程主机上

至于防止你的工作之间的竞争条件(例如,试图删除一个实际上还没有被复制到文件系统的文件),你需要实现的是某种工作链:

http://quartznet.sourceforge.net/faq.html#howtochainjobs

在过去,我曾使用 TriggerListeners 和 JobListeners 来做一些类似于您需要的事情。基本上,您注册的事件侦听器会等待执行某些作业,直到另一个作业完成。测试这些侦听器并了解触发这些事件时发生的情况很重要。您可以很容易地发现自己实施的解决方案在开发中似乎可以正常工作(误报),然后在生产中无法正常工作,而无需了解调度程序如何以及何时执行有关异步作业执行的某些事情。

祝你好运!调度器很有趣!

于 2010-10-21T22:54:45.553 回答