You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何提升LDAP数据查询限制?解决超1000条记录报错问题

解决AD全量用户查询的大小限制问题

AD默认限制单次搜索请求返回最多1000条记录,这就是你遇到“The size limit was exceeded”错误的原因。要获取全量8万条用户数据,必须使用分页查询,通过PageResultRequestControl实现分批获取数据,循环直到所有记录都被拉取完成。

修改后的实现代码

// 初始化搜索请求
SearchRequest searchRequest = new SearchRequest(
    userStore,
    "(&(&(objectClass=User)(objectCategory=Person)))",
    SearchScope.Subtree,
    new string[] { "department", "manager", "mobile" });

// 添加分页控件,设置每页获取1000条(匹配AD默认单次返回上限)
int pageSize = 1000;
PageResultRequestControl pageControl = new PageResultRequestControl(pageSize);
searchRequest.Controls.Add(pageControl);

List<SearchResultEntry> allUsers = new List<SearchResultEntry>();
byte[] cookie = null;

do
{
    // 后续分页请求更新控件的cookie
    if (cookie != null)
    {
        pageControl.Cookie = cookie;
    }

    // 发送请求并获取响应
    SearchResponse response = (SearchResponse)_connection.SendRequest(searchRequest);

    // 收集当前页的用户数据
    foreach (SearchResultEntry entry in response.Entries)
    {
        allUsers.Add(entry);
    }

    // 提取下一页的分页cookie
    PageResultResponseControl responseControl = (PageResultResponseControl)response.Controls.Find(typeof(PageResultResponseControl).FullName, false);
    cookie = responseControl.Cookie;

} while (cookie != null && cookie.Length > 0); // 无下一页cookie时终止循环

// allUsers 即为全量用户列表

关键说明

  • PageResultRequestControl:告知AD服务器启用分页模式,指定每页返回的记录数(建议设为1000,匹配AD默认限制)。
  • 分页Cookie:每次请求后从响应控件中获取cookie,下一次请求携带该cookie,AD服务器会返回后续批次的记录。
  • 循环终止条件:当cookie为空或长度为0时,代表所有记录已获取完成。

额外注意事项

  • 确保你的AD账户拥有读取所有目标用户数据的权限。
  • 建议添加异常处理逻辑(如连接超时、权限错误),避免循环中断导致数据不完整。
  • 针对8万条级别的数据,可适当添加请求间隔延迟,减轻AD服务器负载。

内容的提问来源于stack exchange,提问作者Christy Pirumova

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 04:12:56