-1

我正在为大约 10,000 个用户检索一些 LDAP (Active Directory) 属性。我知道 AD 查询不是世界上最快的,但在 19 分钟(几乎完全正确)时,程序停止处理,大约 15 分钟后我收到错误

连接到系统的设备不再运行

DirectorySearcher.FindOne()方法上。

我认为我在代码中没有做任何奇怪的事情,但我想知道是否需要将其重新写入 aFindAll()然后解析该列表。

searcher.Filter = "(sAMAccountName=" + u.LogonName + ")";

string[] properties = new string[]
         {
                "givenName",
                "sn",
                "displayName",
                "mail",
                "physicalDeliveryOfficeName",
                "division",
                "grpDivision"
         };

searcher.PropertiesToLoad.AddRange(properties);

SearchResult result = searcher.FindOne();

它不会每次都停在同一个用户身上,而且它确实会停在用户身上。我检查了他们的属性是否有任何突出的东西,找不到任何不寻常的东西。

正如您可以想象的那样,在 35 分钟的增量中调试会变得非常繁琐,所以我希望有人以前见过这个,或者知道一些隐藏的 Active Directory 连接时间限制。

谢谢!

4

2 回答 2

0

让我们尽可能多地获取您的结果。一次获得一个结果非常慢。除非您调整了 DC 的设置,否则您无法一次获得全部 10,000 名成员;默认设置是一次最多返回 1000 个结果。因此,我们将使用 * 运算符进行 26 次查询,每个字母对应 sAMAccountName 可能以开头的每个字母。

public static IEnumerable<SearchResult> DirectMembers(string nameOfMyBigGroup)
{
    var namePrefixes = "abcdefghijklmnopqrstuvwxyz".Select(c=>c.ToString());
    foreach(var namePrefix in namePrefixes) 
    {
        searcher.Filter = "(&(sAMAccountName=" + namePrefix + "*)(memberOf=" + nameOfMyBigGroup + "))";

        string[] properties = new string[]
            {
                "givenName",
                "sn",
                "displayName",
                "mail",
                "physicalDeliveryOfficeName",
                "division",
                "grpDivision"
            };

        searcher.PropertiesToLoad.AddRange(properties);

        var results = searcher.FindAll();
        foreach (var result in results) yield return result;
    }
}

编辑:这假设您的域设置为 sAMAccountName 不区分大小写,并且您的用户都具有首字母取自英文字母的名称。如果不满足这些假设,您可能需要做一个涉及分页的更强大的解决方案。

于 2015-08-03T15:27:42.967 回答
-1

虽然我没有一个坚实的根本原因 - 问题已经消失了。我没有更改我的代码,但是当我在家(通过 VPN 连接)尝试它时,程序成功完成。由于连接速度较慢,现在需要 110 分钟,但它不再出错。

显然这是来自服务器的东西,所以我想我遇到了两种可能性之一。

  1. 我在 LAN 上轰炸了 DC,但它跟不上。
  2. DC 上的下班后负载要轻得多,并允许将更多资源分配给我的查询。
于 2015-08-01T05:09:44.420 回答