DirectorySearcher.FindOne()不一致?

时间:2016-04-05 15:41:19

标签: c# .net active-directory

我遇到了一些使用DirectorySearcher.FindOne()方法的代码,其中包含以下属性:

search.Filter = "(&(objectClass=user)(anr=" + userNameNoDomain + "))";
search.PropertiesToLoad.Add("mail");
SearchResult result = search.FindOne();

有些用户有2个与其用户名相关联的帐户,并且每个帐户都有不同的电子邮件地址。文档说明:

  

如果在搜索过程中找到多个条目,则只有第一个条目   条目被退回。

但是,似乎有时此通话会返回第一个帐户,有时会返回第二个帐户。据我所知,一个环境中的代码似乎总是返回第一个记录,另一个环境中的代码似乎总是返回第二个记录。我的理解是两个环境中的代码是相同的,并且它们都在查询相同的AD(可能是使用相同的用户登录但我需要确认这一点)。

我的问题是,FindOne()方法是否有可能在后续调用中返回不同的帐户?如果两个环境具有相同的代码并且调用同一个用户登录的同一个AD,有什么方法可以发生我看到的情况吗?

我最初的假设是某些地方必须有所不同,但我想排除FindOne()在我走下兔子洞之前能够在这种情况下返回不同账户的可能性。

注意:我知道我可以更改代码以使用FindAll(),然后遍历两个帐户并选择正确的帐户,但我想了解为什么在做出改变之前,我必须这样做。如果调查导致我发现某处的差异,我可能不必更改代码。

1 个答案:

答案 0 :(得分:1)

这不是你的代码,它的AD选择结果返回。您无法保证从目录中返回的结果的顺序。如果您点击两个不同的DC并以不同的顺序返回结果,那么这可能就是您在此处看到的内容。