我在C#和Quartz.NET中创建的Windows服务的提示和技巧

时间:2010-10-21 22:30:54

标签: c# asp.net quartz.net

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

目前,该服务采用控制台应用程序的形式,以便于开发。使用ASP.NET页面添加作业,可以使用其他ASP.NET页面进行编辑。

我有一些问题,一些与Quartz.NET有关,还有一些常见问题。

Quartz.NET:

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

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

一般:

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

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

1 个答案:

答案 0 :(得分:2)

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

Quartz.Net scheduler works locally but not on remote host

至于防止作业之间的竞争条件(例如,尝试删除尚未实际复制到文件系统的文件),您需要实现的是某种作业链:

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

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

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