C# DirectoryEntry()在.NET 4.0中工作,但在.NET 3.5中不工作;T

C# DirectoryEntry()在.NET 4.0中工作,但在.NET 3.5中不工作;T,c#,.net-4.0,exception-handling,.net-3.5,directoryservices,C#,.net 4.0,Exception Handling,.net 3.5,Directoryservices,我有一个内部网,需要为广告系统中的用户运行查询。我正在尝试使用DirectoryEntry()对象进行连接,然后设置DirectorySearcher()并搜索用户。归结起来,这是最基本的,我的代码如下: DirectoryEntry directoryObject = new DirectoryEntry("LDAP://RD-HQ/CN=Users,DC=rd-hq,DC=local"); DirectorySearcher ds = new DirectorySearcher(direct

我有一个内部网,需要为广告系统中的用户运行查询。我正在尝试使用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版本会带来不同;我将把您的代码剥离为一个简单的示例,您在.NET3.5和.NET4版本中使用相同的代码和相同的环境

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

DirectoryCOMException返回的错误代码也可能提供线索

构造函数没有失败,但所有属性都抛出异常

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

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

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

我发现很难相信.NET Framework版本会带来不同;我将把您的代码剥离为一个简单的示例,您在.NET3.5和.NET4版本中使用相同的代码和相同的环境

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


DirectoryCOMException返回的错误代码可能也会提供线索。

谢谢,非常好的信息。我意识到在这样的问题中有太多的变量,所以不可能给出一个明确的答案(什么是IIS设置,什么是广告设置,Web.config文件中有什么?)。但你所说的确实有帮助。谢谢,很好的信息。我意识到在这样的问题中有太多的变量,所以不可能给出一个明确的答案(什么是IIS设置,什么是广告设置,Web.config文件中有什么?)。但你所说的确实有所帮助。