![](/img/trans.png)
[英]Code throwing WebException works in .NET 3.5 but not in 4.0
[英]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.