2012-01-04 72 views
1

我有一個覆蓋一組特定的,我的網站所需要的文件,但是在我的網站流量的程序,增加了這麼多,我現在得到使用中的錯誤文件。這將導致它暫時無法更新文件..C#覆蓋文件,在使用錯誤文件由IIS 7.5

這個程序每隔5分鐘運行一次,以更新指定的文件。

我讓這個程序處理文件,而不是程序的編寫究其原因,是因爲我還需要將其更新到不同的網絡服務器(通過FTP)。這樣我也可以確保文件每5分鐘更新一次,而不是當用戶查看頁面時。因此

我的問題是;我可以告訴IIS7.5緩存文件(比如5秒到1分鐘)嗎?這應該確保下次程序運行時更新文件時不會遇到任何問題。

+0

使用'鎖()'在你的代碼。 – 2012-01-04 12:22:55

+0

您是否可以不使用FileSystemWatcher來指示文件何時更新?在哪個時間您應該可以創建副本並從中讀取,直到發送下一個更新爲止。 – Lloyd 2012-01-04 12:28:19

+0

有問題的文件位於IIS服務器上,也被該服務器使用。因此它正在使用中。 我也相當肯定,一個FileSystemWatch沒有任何作用,因爲我們正在談論的IIS服務器需要檢查更新,並chache文件。 – Raskaroth 2012-01-04 15:10:12

回答

1

簡單的解決辦法是改變程序刷新文件存儲在數據庫中的新的信息,而不是在文件系統中。

但是,如果你不能使用數據庫,我會採取不同的方法,將文件內容存儲到System.Web.Caching.Cache上次修改時間,然後檢查文件是否更改,如果不使用緩存版本,如果被改變了,將相同的緩存變量中存儲新的內容和時間。

當然你必須檢查是否可以讀取該文件,然後才刷新緩存內容,如果您無法讀取該文件,你可以簡單地從緩存中獲取最新版本。

文件的初始讀數必須是在的Application_Start,以確保高速緩存已初始化,並在那裏你會不得不等待,直到你可以讀文件,並將其存儲在緩存中的第一次。檢查你可以從文件中讀取

最好的辦法是捕捉例外,因爲鎖可以將檢查後發生的,看到這個帖子:How to check for file lock?

+0

嗯好吧,以及程序是從數據庫中獲取信息的一部分。我使用該程序的原因是爲了在不同的web服務器上更新文件,雖然這是通過ftp完成的,沒有任何問題。我將直接從iis服務器獲取數據庫中的數據。謝謝! – Raskaroth 2012-01-04 14:21:01