我使用PrincipalSearcher时需要分页。我尝试使用基础DirectorySearcher的DirectorySearcher属性,但没有结果。
Samplecode:
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甚至有可能做到这一点吗?
发布于 2015-09-02 08:08:39
PrincipalSearcher的默认页面大小设置为265。尝试将其设置为0,如下所示:
((DirectorySearcher) searcher.GetUnderlyingSearcher()).PageSize = 0;这将启用分页。DirectorySearcher的默认PageSize为0,这就是直接使用它时工作的原因。
https://stackoverflow.com/questions/32230665
复制相似问题