【问题标题】:Pagination with PrincipalSearcher使用 PrincipalSearcher 进行分页
【发布时间】:2015-11-20 17:33:19
【问题描述】:

我在使用 PrincipalSearcher 时需要分页。我尝试使用底层DirectorySearcherVirtualListView 属性无济于事。

示例代码:

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())我得到以下异常(对不起德语文本):

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 甚至可以做到这一点吗?

【问题讨论】:

    标签: c# pagination active-directory


    【解决方案1】:

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

    ((DirectorySearcher) searcher.GetUnderlyingSearcher()).PageSize = 0;
    

    这应该启用分页。 DirectorySearcher 的默认 PageSize 为 0,这就是直接使用它的原因。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-09-01
      • 2017-08-16
      • 2016-11-20
      • 2013-04-14
      • 2015-05-15
      • 2010-09-19
      • 2018-08-08
      相关资源
      最近更新 更多