【问题标题】:C# using DirectoryVirtualListView to page ldap query resultsC# 使用 DirectoryVirtualListView 对 ldap 查询结果进行分页
【发布时间】:2019-10-25 11:00:46
【问题描述】:

我正在尝试从 LDAP 服务器获取用户。服务器限制为每个响应 200 个结果,我想获取所有超过 5000 的用户。所以我需要进行某种分页。到目前为止,我已经尝试了两种方法:

  1. 设置 DirectorySearcher PageSize 属性。这种方法会抛出一个异常,上面写着“[DSA]:需要链接 (DSP) 时无法进行分页”。这是代码
DirectoryEntry rootEntry = new DirectoryEntry("LDAP://server.name");
rootEntry.Username = "cn=any,o=any,dc=any,dc=any";
rootEntry.Password = "thepassword";
rootEntry.AuthenticationType = AuthenticationTypes.FastBind; 
using (DirectorySearcher searcher = new DirectorySearcher(rootEntry))
{
    searcher.PageSize = 50;
    searcher.Filter = "(&(objectClass=person))";
    foreach (SearchResult sr in searcher.FindAll())
    {
        Console.WriteLine(sr.Path);
    }
}
  1. 使用 VirtualListView。这也会抛出异常“无法设置VirtualListView属性值”,代码:
DirectoryEntry rootEntry = new DirectoryEntry("LDAP://server.name", "cn=any,o=any,dc=any,dc=any", "any", AuthenticationTypes.FastBind);
using (DirectorySearcher searcher = new DirectorySearcher(rootEntry))
{
    searcher.Filter = "(&(objectClass=person))";
    searcher.Sort = new SortOption("cn", SortDirection.Ascending);
    searcher.VirtualListView = new DirectoryVirtualListView(25);

    foreach (SearchResult sr in searcher.FindAll())
    {
        Console.WriteLine(sr.Path);
    }
}

谁能告诉我我做错了什么?提前致谢。

【问题讨论】:

    标签: c# ldap directoryservices


    【解决方案1】:
    using (var directoryEntry = new DirectoryEntry(@"LDAP://TestDomain")
    {
        Username = @"TestDomain\TestUser",
        Password = "T@st#1"
    })
    {
        var directorySearcher = new DirectorySearcher(directoryEntry)
        {
            VirtualListView = new DirectoryVirtualListView(0, 9, 1)
        };
    
        // will give you only users with mail
        var filter = "(&(objectCategory=person)(objectClass=user)(mail=*))";
    
        directorySearcher.Filter = filter;
        directorySearcher.Sort = new SortOption() { PropertyName = "displayname", 
                                                     Direction = SortDirection.Ascending };
    
        directorySearcher.PropertiesToLoad.Add("displayname");
        directorySearcher.PropertiesToLoad.Add("mail");
        directorySearcher.SearchScope = System.DirectoryServices.SearchScope.Subtree;
        directorySearcher.SizeLimit = 100;
    
        var results = directorySearcher.FindAll();
        var names = new List<string>();
    
        foreach (SearchResult r in results)
        {
            // Map the result 
        }
    }
    

    您必须使用它,默认情况下它按 cn 对用户进行排序

    1. VirtualListView = new DirectoryVirtualListView(0, 9, 1)
    2. VirtualListView = new DirectoryVirtualListView(0, 49, 100);
    
    1. 它将为您提供从 0 到 9 的 10 条记录
    2. 将从 100 名开始获得 50 名用户。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-12-21
      • 1970-01-01
      • 1970-01-01
      • 2012-07-28
      • 1970-01-01
      • 2019-12-23
      • 2021-12-04
      • 1970-01-01
      相关资源
      最近更新 更多