好吧,我會試着解釋我們使用的方法。我們有一個網絡用戶界面,一個數據庫和兩個窗口服務, 用於更新計劃信息和一個負責導出到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計劃任務不會執行任務。 –