好的,我手上有一個有趣的問題。這裏有一些背景:觀看上傳文件夾的最佳做法?
我正在編寫一個媒體庫服務實現,它將向前端Flash播放器提供URL。客戶希望能夠通過將帶有一些元數據的文件上傳到FTP文件夾中來將內容推送到服務中 - 我已經控制了元數據模式。觀看這個文件夾的服務將拾取任何新文件,將它們複製到「內容」文件夾中,然後將元數據和網址按內容服務中的內容推送到數據庫中。
內容服務不是問題,完成。看一個FTP文件夾是。
我目前的實現使用FileSystemWatcher對象和一個用於xml文件的過濾器。
每個內容項目可能有多個文件,例如高,中,低質量的視頻。
我打算強制按進程或工具將內容組織到自己的文件夾中,只是爲了簡潔起見,但這不是真正的問題。
的XML文件看起來有點像這樣:
<media>
<meta type="video">
<name>The Name Displayed</name>
<heading>The title of the video</heading>
<description>
A lengthy description about the video..
</description>
<length>00:00:19</length>
</meta>
<files>
<video file="somevideo.flv" quality="low"/>
<video file="somevideo.flv" quality="medium"/>
<video file="somevideo.flv" quality="high"/>
</files>
</media>
因此,當一個新的文件中創建FileSystemWatcher.Created事件觸發。我有一個獨立的線程運行來處理與主服務進程共享一個隊列的內容(不要擔心它使用生產者消費者模式,詳細信息如下:http://msdn.microsoft.com/en-us/library/yy12yx1f.aspx)。
這一切都正常,但現在我遇到了左邊和右邊的情況!
我已經考慮到視頻上傳需要更長的時間,因此處理器會嘗試獲得排他鎖定,如果失敗,它會將項目移動到隊列後面並移至下一個項目。
- 如果服務崩潰或者那裏已經存在文件,會發生什麼?所以我寫了一個方法來排隊現有的文件。
- 如果在排隊現有文件時文件正在上載,該怎麼辦?希望它能處理這個問題?我應該定期重新掃描目錄,看看我是否錯過了任何東西?
任何人都可以推薦這種情況下的最佳做法嗎?文件系統監視器是一個好主意,還是應該定期掃描文件夾?
編輯:只是想給你一些規模的想法。我們總共談到10個1000個項目。可能上傳大塊。
我會看看第三方解決方案。我認爲這裏沒有發明可能會涉及它。我已經被推薦使用Fluent Nhibernate,並被命令使用Linq to Sql代替。必須獲得任何第三方的認可 - 需要一個年齡。 – 2009-02-26 10:37:20
@ RobStevenson-Leggett您是否找到第三方解決方案?還是你最終滾動自己的? – phuzi 2015-05-18 19:53:16