2010-10-21 35 views
0

我有一個正在進行的項目,這個項目正在創建一個Windows服務,它基本上將文件移動到多個路徑中。一項工作可能是每60秒從FTP服務器獲取與正則表達式匹配的所有文件,並將它們傳輸到網絡路徑,等等。這些作業存儲在SQL數據庫中。我在C#和Quartz.NET中創建的Windows服務的提示和技巧

目前,該服務採用控制檯應用程序的形式,以方便開發。作業是使用ASP.NET頁面添加的,並且可以使用另一個ASP.NET頁面進行編輯。

雖然我有一些問題,有些涉及到Quartz.NET和一些常規問題。

Quartz.NET:

1:這是我最大的問題。看到我正在開發應用程序作爲控制檯應用程序暫時,我不得不在我所有的文件/頁面上創建一個新的Quartz.NET調度程序。這導致了多個令人困惑的錯誤,但我不知道如何在一個全局文件中安排調度器,並在我的ASP.NET頁面中訪問這些調度器(例如,我可以將細節放入一個網格視圖中進行編輯,例如)

2:我的經理會建議我可以考慮在Quartz.NET中有多個「配置」。這意味着在任何時候,管理員都可以更改應用程序配置,以便只運行專門選擇的應用程序。在Quartz.NET中做這件事最簡單的方法是什麼?

一般:

1:有一兩件事,那就是在這個應用程序的關鍵是保證該文件已被移動,它實際上是在目標路徑上(原始文件被刪除後的舉動,所以這將是災難性的如果該文件在沒有被真正複製時被刪除!)。我還需要確保文件內容在最初的路徑上相匹配,並確保目標路徑讓您放心,複製的內容是正確的。我目前正在通過MD5散列初始文件,複製文件以及在刪除它之前確保該文件存在於服務器上。然後我在服務器上散列該文件並確保哈希匹配。有沒有更簡單的方法來做到這一點?我擔心哈希可能會給系統帶來壓力。

2:這與上述問題有關,但不是至關重要因爲甚至連我的經理都沒有任何想法我會這樣做,但我很樂意實現這一點。如果在寫入文件時執行作業,則可能會出現問題,這可能是因爲一半文件將被傳輸,從而使其完全無用,並且它也會很糟糕,因爲初始文件會被破壞它正在寫入!有沒有辦法檢查這個?

回答

2

正如您發現的那樣,在ASP.NET內部運行Quartz scheduler會帶來很多問題。退房馬爾科Lahma的迴應你的問題有關運行的ASP.NET Web應用程序內的調度:

Quartz.Net scheduler works locally but not on remote host

至於防止您的工作(如之間的競爭條件試圖刪除不是招」的文件。牛逼實際上已被複制到文件系統還),您需要實現的是某種形式的作業鏈的:

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

在過去,我已經使用了TriggerListeners和的JobListener做類似的東西是什麼你需要。基本上,您註冊了等待執行某些作業的事件偵聽器,直到其他作業完成。測試這些聽衆並瞭解發生這些事件時發生的情況非常重要。您可以很容易地發現自己實現了一種似乎在開發過程中工作正常的解決方案(誤報),然後無法在生產環境中工作,而無法瞭解調度程序如何以及何時執行有關異步作業執行的某些事情。

祝你好運!調度程序很有趣!