Directory.Exists 对于远程文件夹 returns false 在刚创建文件夹后

Directory.Exists for remote folder returns false after folder was just created

我在服务器 "A" 和 "B" 上有应用程序(两者都有 Windows Server 2012)。 "A" 上的应用程序在本地创建文件夹。在 "B" 上的创建应用程序检查服务器 "A" 上的远程路径是否存在文件夹。 "B" 上的应用程序在 ~1.5 秒内变为错误。在那之后它开始变得真实:

...
//directory.Exists = false
LogInfo(String.Format("Timestamp: {0}", DateTime.UtcNow.ToString("yyyy-MM-dd HH:mm:ss.fff", CultureInfo.InvariantCulture)));
//2016-05-16 13:15:37.281

while (!directory.Exists)
{
    directory.Refresh();
}
//directory.Exists = true
LogInfo(String.Format("Timestamp: {0}", DateTime.UtcNow.ToString("yyyy-MM-dd HH:mm:ss.fff", CultureInfo.InvariantCulture)));
//2016-05-16 13:15:38.546

已创建文件夹的父文件夹为用户共享,用于运行应用程序"A"。

这是为刚创建的文件夹授予权限的问题还是其他问题?

有什么解决办法吗?因为我需要在应用程序 "B" 上知道文件夹是否已创建并且循环 while 不是解决方案。

由于信息有限(例如,UNC 路径是否正在进行任何复制),我认为您的问题与 SMB2.0 有关。

尝试从 this link:

在服务器 B 上禁用此功能(通过 CMD 提示符)
sc.exe config lanmanworkstation depend= bowser/mrxsmb10/nsi 
sc.exe config mrxsmb20 start= disabled

完成后重启服务器 B。

SMB2.0 旨在通过构建有关 UNC 共享的缓存信息来帮助提高性能,但是如果您需要您的应用程序需要每秒检查文件(我也有一个这样做),它可能会带来负面影响影响功能。

使用此帖子中有关 SMB 的信息尝试了不同的选项:

Windows file share: why sometimes newly created files aren't visible for some period of time?

https://technet.microsoft.com/en-us/library/ff686200(v=ws.10).aspx

将 DirectoryCacheLifetime 设置为零没有帮助。 将 FileNotFoundCacheLifetime 设置为零对我的情况有所帮助。