首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用PrincipalSearcher分页

用PrincipalSearcher分页
EN

Stack Overflow用户
提问于 2015-08-26 15:24:54
回答 1查看 1.2K关注 0票数 1

我使用PrincipalSearcher时需要分页。我尝试使用基础DirectorySearcherDirectorySearcher属性,但没有结果。

Samplecode:

代码语言:javascript
复制
using System;
using System.DirectoryServices;
using System.DirectoryServices.AccountManagement;
using System.Linq;
namespace Testbed
{
    internal class Testbed
    {
        private static void Main(string[] args)
        {
            Works();
            Fails();
            Console.ReadKey();
        }

        private static void Works()
        {
            var entry = new DirectoryEntry("LDAP://server/DC=example,DC=com", @"USERNAME", "PASSWORD");
            var searcher = new DirectorySearcher(entry);

            searcher.SearchScope = SearchScope.Subtree;
            searcher.Filter = "(cn=*)";
            // sort is needed, otherwise DVLV will not work?
            searcher.Sort = new SortOption("cn", SortDirection.Ascending);

            searcher.VirtualListView = new DirectoryVirtualListView(5, 10, 5);
            SearchResultCollection result = searcher.FindAll();
            Console.WriteLine("Works: " + result.Count);
        }

        private static void Fails()
        {
            var context = new PrincipalContext(ContextType.Domain, "server", "DC=example,DC=com",
                ContextOptions.Negotiate,
                @"USERNAME", "PASSWORD");

            var user = new UserPrincipal(context)
            {
                DisplayName = null,
            };

            var searcher = new PrincipalSearcher(user);
            ((DirectorySearcher) searcher.GetUnderlyingSearcher()).Sort = new SortOption("cn", SortDirection.Ascending);
            ((DirectorySearcher) searcher.GetUnderlyingSearcher()).VirtualListView = new DirectoryVirtualListView(0, 2, 2);
            PrincipalSearchResult<Principal> result = searcher.FindAll();

            Console.WriteLine("Fails: " + result.Count());
        }
    }
}

当我直接使用DirectorySearcher (方法:Works())时,一切都很好,但是对于PrincipalSearcher (方法:Fails()),我得到了以下异常(对德文表示抱歉):

代码语言:javascript
复制
Ausnahmefehler: System.Runtime.InteropServices.COMException: Die angeforderte kritische Erweiterung wird vom Server nicht unterstützt.

   bei System.DirectoryServices.SearchResultCollection.ResultsEnumerator.MoveNext()
   bei System.DirectoryServices.AccountManagement.ADEntriesSet.MoveNext()
   bei System.DirectoryServices.AccountManagement.FindResultEnumerator`1.MoveNext()
   bei System.DirectoryServices.AccountManagement.FindResultEnumerator`1.System.Collections.IEnumerator.MoveNext()
   bei System.Linq.Enumerable.Count[TSource](IEnumerable`1 source)

有什么解决办法吗?PrincipalSearcher甚至有可能做到这一点吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-09-02 08:08:39

PrincipalSearcher的默认页面大小设置为265。尝试将其设置为0,如下所示:

代码语言:javascript
复制
((DirectorySearcher) searcher.GetUnderlyingSearcher()).PageSize = 0;

这将启用分页。DirectorySearcher的默认PageSize为0,这就是直接使用它时工作的原因。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32230665

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档