gpt4 book ai didi

c# - 使用 PrincipalSearcher 进行分页

转载 作者:太空宇宙 更新时间:2023-11-03 23:30:58 28 4
gpt4 key购买 nike

我在使用 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(方法:失败()) 我得到以下异常(抱歉是德语文本):

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

最佳答案

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

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

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

关于c# - 使用 PrincipalSearcher 进行分页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32230665/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com