Freigeben über


Grosse Ergebnismengen mit den DirectoryServices Klassen

Wenn man auf ein vorhandenes LDAP Verzeichnis oder Active Directory zugreift, gibt es in .NET den Namepace "System.DirectoryServices". In diesem Namespace sind viele brauchbare Klassen für den Zugriff auf diese Directorytypen zu finden.

Wenn man eine Abfrage auf ein Verzeichnis ausführt, die mehr als 1000 Treffer zurückliefert, kann man auf ein kleines Problem stossen. Nachfolgender Code funktioniert zwar, aber liefert immer maximal 1000 Treffer zurück.

                 DirectoryEntry parent = new DirectoryEntry(europeDomainLDAP, null, null, AuthenticationTypes.Secure);
                DirectorySearcher ds = new DirectorySearcher(parent, "(&(objectCategory=user)(company=GERMANY))");
           
                SearchResultCollection src = ds.FindAll();

Der Grund für die Begrenzung ist ein Defaultwert in der Klasse DirectorySearcher. Wenn man den Wert ändert, dann kommen auch wirklich mehr als 1000 Treffer zurück. Dazu muss man einfach das Property PageSize entsprechend initialisieren "{ CacheResults= false, SizeLimit = 9999, PageSize = 1000 }".

                 DirectoryEntry parent = new DirectoryEntry(europeDomainLDAP, null, null, AuthenticationTypes.Secure);
                DirectorySearcher ds = new DirectorySearcher(parent, "(&(objectCategory=user)(company=GERMANY))") { CacheResults= false, SizeLimit = 9999, PageSize = 1000 };
           
                SearchResultCollection src = ds.FindAll();

Viel Spass beim Ausprobieren ... Gunnar