2016-09-22 145 views
0

有2點相似的配置:閱讀文件

  1. 的Ubuntu 16.04服務器的共享文件夾中\\它的Linux \數據和文件test.txt(桑巴4.3.9-Ubuntu的)
  2. 的Windows Server 2012服務器的共享文件夾\\ WIN \數據和文件test.txt它

還有另一個PC(Win 7的)和C#測試程序,從任何的讀取文件內容如上所述的循環設置如下:

  1. 讀取文件時,請記住數據大小
  2. 等待500毫秒
  3. 再次
  4. 讀文件,如果大小改變 - 打印出的大小與該文件末尾的內容幾個字節一起,更新存儲大小
  5. 轉到2.

現在,當我運行測試與安裝#1(贏股) - 如果我打開服務器上的文件,修改的內容並保存 - 我可以馬上看到測試程序的反應 - 第一文件修改後的循環迭代爲我帶來了新的文件大小和新的數據。

但是當我運行與setup#2(ubuntu共享)相同的測試 - 我看不到修改過的大小或內容在測試程序中,直到有一段時間過去(並且這個時間取決於我用什麼方法讀取文件內容,FileStream約爲10秒,File.ReadAllBytes約爲30秒到10分鐘)。

設置#2的一個有趣的注意事項 - 如果我在Ubuntu中修改文件,然後去測試PC(測試程序正在循環,嘗試獲取更新的文件內容)並用記事本打開共享文件 - 測試程序立即獲取更新的內容。

對我來說,它看起來像測試機器上的客戶端緩存。唯一我能想到的是,Win Server 2012使用SMB3和Ubuntu - SMB2_10,並以某種方式強制客戶端(測試閱讀器部分)以不同方式運行。

我沒有Linux的專家,據我知道有沒有辦法能夠在Ubuntu SMB3協議

所以,問題是如何強制客戶端(也可以作爲客戶端SMB3而不是服務器工作)( Win 7)無論服務器類型和協議版本如何都無緩存地讀取,或者如果不可能 - 如何用記事本模擬C#代碼打開文件,這顯然給它一個啓示並迫使所有讀者獲得更新的內容。

回答

0

計算出在linux samba配置(smb.conf)中禁用機會鎖(oplocks)的幫助。

使用OpLocks禁用的客戶端計算機上的測試程序獲取更新的內容而無需緩存。