Есть 2 похожих расстановки:Чтение файлов из доли Linux самбы и кэширования
- Ubuntu 16,04 сервер с общей папкой \\ \ линукс данными и файл test.txt в нем (Samba 4.3.9-Ubuntu)
- сервер 2012 сервера Windows, с общей папкой \\ \ выиграть данных и файл test.txt в нем
Существует другой компьютер (Win 7) и C# тестовая программа, которая считывает содержимое файла из одного из установки, описанные выше, в виде петли:
- чтение файла, помните, размер данных
- ждать 500 мс файл
- читать снова, если размер изменился - распечатывать размер вместе с несколькими байтами контента с конца этого файла, обновление хранится размер
- goto 2.
Теперь, когда я запускаю тест с установкой № 1 (доля выигрыша) - если я открываю файл на сервере, изменяю содержимое и сохраняю - я сразу вижу реакцию в тестовой программе - сначала итерация цикла после изменения файла приносит мне новый размер файла и новые данные.
Но когда я запускаю те же тесты с установкой № 2 (общий ресурс ubuntu) - я не вижу измененный размер или содержимое в тестовой программе до тех пор, пока не пройдет какое-то время (и это время меняется в зависимости от того, какой метод я использую для чтения содержимое файла. С FileStream оно составляет около 10 секунд, а File.ReadAllBytes - от 30 секунд до 10 минут).
Замечание с установкой # 2 - если я модифицирую файл в Ubuntu, то перейдите на тестовый компьютер (где тестовая программа теперь циклически, пытается получить обновленное содержимое файла) и откройте общий файл с помощью блокнота - test программа немедленно получает обновленный контент.
Для меня это похоже на кэширование на клиентской машине на тестовой машине. Единственное, о чем я могу думать, это то, что Win Server 2012 использует SMB3 и Ubuntu - SMB2_10, и это каким-то образом заставляет клиента (часть считывающего устройства) вести себя по-разному.
Я не эксперт Linux, и, насколько я понимаю, нет никакого способа, чтобы включить протокол SMB3 в Ubuntu (он может работать как SMB3 клиента, но не сервер)
Таким образом, вопрос в том, как заставить клиента (Win 7) для чтения без кеша, независимо от типа сервера и версии протокола, или, если это невозможно, - как имитировать из файла открытия кода C# с помощью блокнота, что явно дает ему удар и заставляет всех читателей получать обновленный контент ,