我有一个需要为 AD 系统中的用户运行查询的 Intranet。我正在尝试使用 DirectoryEntry() 对象进行连接,然后设置 DirectorySearcher() 并搜索用户。归结为最基本的,我的代码是这样的:
DirectoryEntry directoryObject = new DirectoryEntry("LDAP://RD-HQ/CN=Users,DC=rd-hq,DC=local");
DirectorySearcher ds = new DirectorySearcher(directoryObject);
ds.Filter = ("(&(objectClass=user))");
var test = ds.FindAll();
foreach (SearchResult item in test)
{
}
奇怪的是,当我引用 System.DirectoryServices DLL 的 .NET4.0 版本时,这在我的开发机器上有效,但在 .NET3.5 中无效(其中 System.DirectoryServices DLL 的版本是 v2.0.0.0)。
我得到的具体错误是关于ds.FindAll()
方法的,内容如下:
异常详细信息:System.DirectoryServices.DirectoryServicesCOMException:发生操作错误。
单步执行代码表明该directoryObject
对象实际上没有在第一行正确初始化。构造函数没有失败,但所有属性都抛出异常。
有什么想法我可能做错了吗?谢谢,我意识到这是一个有点蹩脚的、模糊的问题。
解决了
好的,我设法通过使用接受用户名和密码的 DirectoryEntry() 构造函数的重载来解决这个问题:
DirectoryEntry directoryObject = new DirectoryEntry("LDAP://RD-HQ/CN=Users,DC=rd-hq,DC=local", "rd-hq.local\mick", "notmypassword");
我仍然不确定为什么这在 .NET3.5 版本与 .NET4.0 版本中的工作方式不同,并且很乐意将答案标记为正确,这至少可以帮助我更好地理解这些东西。