Can I get more than 1000 records from a DirectorySearcher in Asp.Net?


Can I get more than 1000 records from a DirectorySearcher in Asp.Net?



I just noticed that the return list for results is limited to 1000. I have more than 1000 groups in my domain (HUGE domain). How can I get more than 1000 records? Can I start at a later record? Can I cut it up into multiple searches?

Here is my query:

DirectoryEntry dirEnt = new DirectoryEntry("LDAP://dhuba1kwtn004"); string[] loadProps = new string[] { "cn", "samaccountname", "name", "distinguishedname" }; DirectorySearcher srch = new DirectorySearcher(dirEnt, "(objectClass=Group)", loadProps); var results = srch.FindAll(); 

I have tried to set srch.SizeLimit = 2000; but that doesn't seem to work. Any ideas?




404 page that displays requested page

1:



Is it OK to use static variables to cache information in ASP.net?
You need to set DirectorySearcher.PageSize to a non-zero value to get all results..
What is a good extendable blogging application for ASP.NET? [closed]
BTW you should also dispose DirectorySearcher when you're finished with it.
What is Native Code?
using(DirectorySearcher srch = new DirectorySearcher(dirEnt, "(objectClass=Group)", loadProps)) {     srch.PageSize = 1000;     var results = srch.FindAll(); } 
The API documentation isn't very clear, but essentially:.
Microsoft JScript runtime error: 'this._postBackSettings.async' is null or not an object
  • when you do a paged search, the SizeLimit is ignored, and all matching results are returned as you iterate through the results returned by FindAll.


    Caching the sessionfactory
    Results will be retrieved from the server a page at a time.


    How do I create an XML file using templating similar to ASP.NET
    I chose the value of 1000 above, but you can use a smaller value if preferred.


    What Happened to ASP.Net Mobile Web Forms?
    The tradeoff is: using a small PageSize will return each page of results faster, but will require more frequent calls to the server when iterating over a large number of results..
  • by default the search isn't paged (PageSize = 0).

    In this case up to SizeLimit results is returned..
As Biri pointed out, it's important to dispose the SearchResultCollection returned by FindAll, otherwise you may have a memory leak as described in the Remarks section of the MSDN documentation for DirectorySearcher.FindAll: http://msdn.microsoft.com/en-us/library/system.directoryservices.directorysearcher.findall.aspx. One way to help avoid this in .NET 2.0 or later is to write a wrapper method that automatically disposes the SearchResultCollection.

This might look something like the following (or could be an extension method in .NET 3.5):.
public IEnumerable<SearchResult> SafeFindAll(DirectorySearcher searcher) {     using(SearchResultCollection results = searcher.FindAll())     {         foreach (SearchResult result in results)         {             yield return result;                 }      } // SearchResultCollection will be disposed here } 
You could then use this as follows:.
using(DirectorySearcher srch = new DirectorySearcher(dirEnt, "(objectClass=Group)", loadProps)) {     srch.PageSize = 1000;     var results = SafeFindAll(srch); } 



94 out of 100 based on 84 user ratings 334 reviews