我有一个用 C# 编写的 Windows 服务,在 Windows Server 2012 上运行。该服务作为域用户运行,具有本地计算机上的权限以及对 Isilon SAN 上共享网络资源的 NTFS 权限。以该用户身份使用以下格式登录时,我可以在 Windows 资源管理器中访问共享文件和目录:
\\isilon\path\to\dir\
然而,呼吁
System.IO.Directory.Exists()
总是返回假。起初我以为是这样的:http: //support.microsoft.com/kb/827421 但是,实施解决方法建议您可以使用
System.IO.Directory.GetDirectories()
只是访问目录(不先检查它们是否存在)。这只是抛出
System.IO.IOException: An unexpected network error occurred.
当在同一网络上的另一台服务器 (Windows 2008) 上运行时,同样的服务代码可以工作。
真正疯狂的是,如果我重新启动服务器,文件系统调用首先会成功。然后在一段时间后,或者从该计算机访问相同的文件路径后,程序调用将开始失败,并且永远不会再自发成功。重新启动服务器可以在很短的时间内解决此问题。
我完全被难住了,因为几乎不需要重新启动 Windows 服务器实例。我不知道什么会影响文件共享权限或可访问性。可能与 Windows server 2012 上 SMB 3.0 的新实现有关?
编辑:好的,事实证明我并不疯狂。OneFS 版本(在 Isilon SAN 上运行的文件系统)与 Windows server 2012 没有明确兼容。虽然它声称与 SMB 兼容。从 OneFS 版本 6.5.5.14 更新到 6.5.5.20 立即修复了该问题,并且此后一直稳定。