[英]How to prevent more than one application from opening the same file
我有Windows服務,可以將文件上傳到其他ftp站點。
為了加快上傳速度,此服務安裝在3台計算機上。 然后出現問題,因為3個服務都在同一位置查找文件,有時它們只是拾取同一文件,然后引發異常。
如何避免這種情況? .net 4.5
使用async
方法設計的服務,因此如果應用文件鎖定,性能會降低嗎? 我是這樣想的
但不知道如何
您可以打開該文件以進行獨占讀取,如果該文件失敗,則表示當前有其他服務正在處理該文件,然后移至下一個文件。
File.Open("test.txt", FileMode.Open, FileAccess.Read, FileShare.None);
您可以創建一個隊列。 它可以是MSMQ或其他服務,它將使用文件名加載db Table。 您的其他服務可以使用一些鎖表。
您將擁有一個包含單個記錄的表,您的服務將在事務中將update table t1 set t1.f1=t1.f1
。 這將阻止其他服務繼續。
在另一個表中,您有文件列表和一個標志(如果已使用)。
考慮一種僅讀取這些文件並加載文件名表的服務。 其他3個服務-端點,將鎖定鎖表記錄,然后繼續讀取n
文件名並將它們標記為已使用。 加載文件后,即可刪除文件名。 如果服務在采取和刪除之間失敗:在下一個過程開始時,檢查時間戳記。 如果文件已被占用,可以說昨天並且記錄仍然存在,可能是需要再次處理它們。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.