我有一个Intranet需要在AD系统中为用户运行查询。我尝试使用DirectoryEntry()对象进行连接,然后设置DirectorySearcher()并为用户执行搜索。归结为这是最基本的,我的代码是这样的:DirectoryEntry()在.NET 4.0中工作,但在.NET 3.5中不工作?
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
对象实际上并未在第一行正确初始化。构造函数不会失败,但所有属性都抛出异常。
任何想法我可能做错了什么?谢谢,我意识到这是一个蹩脚,模糊的问题。
解决
OK,我设法通过使用重载接受了一个用户名和密码的DirectoryEntry()构造函数来解决这个问题:
DirectoryEntry directoryObject = new DirectoryEntry("LDAP://RD-HQ/CN=Users,DC=rd-hq,DC=local", "rd-hq.local\mick", "notmypassword");
我仍然不知道为什么这在.NET3.5版本和.NET4.0版本中的作用是不同的,并且会很高兴地标记为正确的答案,至少可以帮助我更好地理解这些东西。
谢谢,很好的信息。我意识到在这样的问题中存在很多变量,因此无法给出明确的答案(什么是IIS设置,什么是AD设置,Web.config文件中有什么?)。但肯定你说过的话有帮助。 –