繁体   English   中英

DirectoryEntry()在.NET 4.0中工作,但在.NET 3.5中不是吗?

[英]DirectoryEntry() works in .NET 4.0 but in .NET 3.5 doesn't?

我有一个Intranet,需要为AD系统中的用户运行查询。 我试图使用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版本中会有所不同,并且会愉快地将答案标记为正确,这至少可以帮助我更好地理解这些知识。

构造函数不会失败,但是所有属性都将引发异常。

当您访问相关属性之一时, DirectoryEntry实例将尝试绑定到目录-如果失败,则属性访问器将引发异常。 如果尝试从调试器查看属性,也会发生这种情况。

在上面的代码中,绑定是在调用ds.FindAll()时发生的。

显然,绑定到目录存在问题。

我很难相信.NET Framework版本会有所作为。 我会将您的代码精简为一个简单的示例,对于.NET 3.5和.NET 4版本,您将使用相同的代码和相同的环境。

错误消息“发生操作错误”相当普遍,但是如果您没有访问目录的权限,则可能会发生。 因此,一种可能性是您的.NET 3.5和.NET 4版本以不同的身份运行。 至少这似乎是造成类似问题的原因。

DirectoryCOMException返回的ErrorCode也可能提供线索。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM