有2点相似的配置:阅读文件
- 的Ubuntu 16.04服务器的共享文件夹中\\它的Linux \数据和文件test.txt(桑巴4.3.9-Ubuntu的)
- 的Windows Server 2012服务器的共享文件夹\\ WIN \数据和文件test.txt它
还有另一个PC(Win 7的)和C#测试程序,从任何的读取文件内容如上所述的循环设置如下:
- 读取文件时,请记住数据大小
- 等待500毫秒 再次
- 读文件,如果大小改变 - 打印出的大小与该文件末尾的内容几个字节一起,更新存储大小
- 转到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#代码打开文件,这显然给它一个启示并迫使所有读者获得更新的内容。