好吧,我会试着解释我们使用的方法。我们有一个网络用户界面,一个数据库和两个窗口服务, 用于更新计划信息和一个负责导出到Excel的服务。
数据库
的表与他的日程安排信息一起保存我们的查询。 用于存储所有出口的表格,因此我们可以保留历史记录。
的Web UI
通过一个webinterface我们可以存储需要被调度的基础上, 一些自动执行每小时,一些日常的,有的每周和每月的一些疑问。 在界面上,用户可以根据时间表制定自己的病态配置。
当查询被保存时,我们立即通过自写的 SQL函数计算此查询的nextruntime并将此值存储在数据库中。每次更新发生记录,前查询更改或日程安排信息更改时,我们都会更新上次修改的字段。
服务
我们的第一个服务在该领域nextruntime不为空的所有信息的读取。我们将这些信息保存在对象列表的内存中。 每隔5分钟我们检查是否有对该导出进行的更改,因为可以更改查询或更新日程表信息 。如果我们找到更新的记录,我们会在对象列表中更新此信息。 在同一服务中,我们每30秒在对象列表上循环一次,看看nextruntime是否等于实际的系统日期时间。如果是这样,我们向具有一定状态的第二个表添加记录,因此第二个服务知道哪些记录需要处理,并且我们也保留增量序列号,以便按顺序导出它们。
我们的第二个服务轮询第二个表,并负责执行查询,将结果导出到Excel,并在完成后根据计划信息更新第一个表中的nextruntime字段。为了创建Excel文件,我们使用了OpenXml库。
我希望这对你有点清楚。
您可以创建一个简单的控制台应用程序来处理,然后通过Window自己的调度程序运行它? – Gimly
我同意Gimly的观点,即批处理或日常任务需要最好地执行,以便将这些测试或报告作为与控制台应用程序不同的可执行文件。那么只需在Windows任务调度程序上创建一个任务 –
我们正在使用[Quartz Scheduler](https://www.quartz-scheduler.net/),Windows计划任务不会执行任务。 –