C#使用DirectoryVirtualListView分页ldap查询结果

C#使用DirectoryVirtualListView分页ldap查询结果,c#,ldap,directoryservices,C#,Ldap,Directoryservices,我正在尝试从LDAP服务器获取用户。服务器被限制为每个响应200个结果,我想得到所有超过5000的用户。所以我需要做一些分页。到目前为止,我已经尝试了两种方法: 正在设置DirectorySearcher PageSize属性。这种方法引发一个异常,该异常表示“[DSA]:当需要链接(DSP)时,不可能进行分页”。这是密码 DirectoryEntry rootEntry=newdirectoryEntry(“LDAP://server.name”); Username=“cn=any,o=an

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

  • 正在设置DirectorySearcher PageSize属性。这种方法引发一个异常,该异常表示“[DSA]:当需要链接(DSP)时,不可能进行分页”。这是密码
  • DirectoryEntry rootEntry=newdirectoryEntry(“LDAP://server.name”);
    Username=“cn=any,o=any,dc=any,dc=any”;
    root entry.Password=“thepassword”;
    rootEntry.AuthenticationType=AuthenticationTypes.FastBind;
    使用(DirectorySearcher search=新DirectorySearcher(rootEntry))
    {
    searcher.PageSize=50;
    searcher.Filter=“(&(objectClass=person))”;
    foreach(searcher.FindAll()中的SearchResult sr)
    {
    控制台写入线(sr.Path);
    }
    }
    
  • 使用VirtualListView。这还会引发异常“VirtualListView属性值无法设置”,代码:
  • DirectoryEntry rootEntry=newdirectoryentry(“LDAP://server.name”,“cn=any,o=any,dc=any,dc=any”,“any”,AuthenticationTypes.FastBind”);
    使用(DirectorySearcher search=新DirectorySearcher(rootEntry))
    {
    searcher.Filter=“(&(objectClass=person))”;
    searcher.Sort=新排序(“cn”,SortDirection.升序);
    searcher.VirtualListView=新目录VirtualListView(25);
    foreach(searcher.FindAll()中的SearchResult sr)
    {
    控制台写入线(sr.Path);
    }
    }
    
    谁能告诉我我做错了什么吗?。提前谢谢

    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 
        }
    }
    
  • 它将为您提供10条从0到9的记录
  • 将从100个用户开始获得50个用户
  • 1. VirtualListView = new DirectoryVirtualListView(0, 9, 1)
    2. VirtualListView = new DirectoryVirtualListView(0, 49, 100);