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