LdapConnection SearchRequest throws exception pour “La taille limite a été dépassée”

En raison du fait que nous sommes tenus de vous connecter à un serveur LDAP en utilisant le protocole LDAPS nous devons utiliser LdapConnection au lieu de DirectoryEntry.

Voici le code source:

        SearchResponse response;
        using (LdapConnection con = new LdapConnection(new LdapDirectoryIdentifier(Host, Port)))
        {
            if (IsSSL)
            {
                con.SessionOptions.SecureSocketLayer = true;
                con.SessionOptions.VerifyServerCertificate =
                    (connection, certificate)
                    => true;
            }
            con.Credential = new NetworkCredential(_username, _password);
            con.AuthType = AuthType.Basic;
            con.Bind();

            if (logMessage != null)
                logMessage("Connected to LDAP");

            string sFilter = String.Format(
                "(&(objectcategory=person)(objectclass=user){0}(!(userAccountControl:1.2.840.113556.1.4.803:=2)))",
                filter
                );

            SearchRequest request = new SearchRequest("OU=Corp,DC=mydc,DC=com", sFilter, SearchScope.Subtree);
            request.Attributes.Add(Resources.objectguid);
            request.Attributes.Add(Resources.givenname);
            request.Attributes.Add(Resources.sn);
            request.Attributes.Add(Resources.initials);
            request.Attributes.Add(Resources.samaccountname);
            request.Attributes.Add(Resources.userprincipalname);
            request.Attributes.Add(Resources.mail);
            request.Attributes.Add(Resources.objectsid);
            request.Attributes.Add(Resources.department);
            request.Attributes.Add(Resources.company);
            request.SizeLimit = 10;

            response = (SearchResponse) con.SendRequest(request);
        }

Lors de l'exécution du code source (nous avons vérifié les informations d'identification, l'hôte, le port, etc - à l'aide d'un 3ème partie logiciel) nous obtenons l'exception suivante:

La taille limite a été dépassée

Description: Une exception non gérée s'est produite pendant l'exécution de la demande web actuelle. Veuillez consulter la trace de la pile pour plus d'informations sur l'erreur et où elle a son origine dans le code.

Détails De L'Exception: Système.DirectoryServices.Les protocoles.DirectoryOperationException: La taille limite a été dépassée

Source De L'Erreur:

response = (SearchResponse) con.SendRequest(request);
[DirectoryOperationException: The size limit was exceeded]
   System.DirectoryServices.Protocols.LdapConnection.ConstructResponse(Int32

messageId, LdapOperation opération, ResultAll resultType, TimeSpan
requestTimeOut, Boolean exceptionOnTimeOut) +2385
Système.DirectoryServices.Les protocoles.LdapConnection.SendRequest(DirectoryRequest
demande, TimeSpan requestTimeout) +499
Système.DirectoryServices.Les protocoles.LdapConnection.SendRequest(DirectoryRequest
demande) +50
UserSearchProvider.ADUserSearchProvider.QueryStore(UserSearchCriteriaCollection
les critères, Action1 logMessage) in c:\Users\stemarie\Documents\Visual
Studio
2012\Projects\Idealink.Modules\UserSearchProvider\UserSearchProvider\ADUserSearchProvider.cs:298
UserSearchProvider.UserSearchProvider.QueryAndSort(UserSearchCriteriaCollection
criterias, Action
1 logMessage) dans c:\Users\stemarie\Documents\Visual
Studio
2012\Projects\Idealink.Modules\UserSearchProvider\UserSearchProvider\UserSearchProvider.cs:77
UserSearchProvider.UserSearchProvider.Recherche(UserSearchCriteriaCollection
les critères, Action1 logMessage) in c:\Users\stemarie\Documents\Visual
Studio
2012\Projects\Idealink.Modules\UserSearchProvider\UserSearchProvider\UserSearchProvider.cs:33
UserSearchProvider.UserSearchService.Search(UserSearchCriteriaCollection
criterias, Action
1 logMessage) dans c:\Users\stemarie\Documents\Visual
Studio
2012\Projects\Idealink.Modules\UserSearchProvider\UserSearchProvider\UserSearchService.cs:44
UserSearchProviderTest._Default.Page_Load(Object sender, EventArgs e) dans c:\Users\stemarie\Documents\Visual Studio
2012\Projects\Idealink.Modules\UserSearchProvider\UserSearchProviderTest\Par Défaut.aspx.cs:28

La partie qui me confond, c'est que nous n'avons spécifier la limite de taille maximale, nous ne voulons pas plus de 100 entrées - nous voulons limiter. Mais encore la bibliothèque constamment jette l'erreur, même si l'on précise un SizeLimit de 1.

Quelqu'un aurait-il des idées/suggestions à propos de ce problème? Nous sommes très proches de ce travail et ont juste besoin de résoudre ce dernier problème.

  • Combien d'entrées de répertoire correspondant à votre recherche ? Qu'advient-il si vous retirez le SizeLimit ligne ? Semble que le sizelimit échouera si sa valeur est inférieure que le serveur de la taille de page. Je pense que vous devriez essayer de délivrer une recherche paginée voir stackoverflow.com/q/1646518/1236044
  • Je n'ai enjeux d'une recherche paginée de contrôle dans la demande mais j'ai reçu une réponse que le serveur ne prend pas en charge la recherche paginée.
  • Je ne sais pas combien d'entrées pourraient correspondre à ma recherche, mais je veux seulement 100 d'entre eux. Le but du code est de créer un composant qui effectue les recherches de l'utilisateur" dans le protocole LDAPS pour notre produit - Cette bibliothèque n'est pas un frankenlibrary - nous voulons qu'il soit très robuste LDAPS de recherche par l'utilisateur (l'adaptateur) de la bibliothèque, de sorte que nous pouvons offrir à nos clients. Donc je n'ai aucun moyen de prédire la saisie de l'utilisateur et le nombre de résultats, cela pourrait signifier pour la bibliothèque.
  • Si je supprime le SizeLimit ligne, j'obtiens exactement la même erreur
  • Sur cette page go4answers.webhost4life.com/Example/... il est dit : "Oui, vous pouvez intercepter l'exception et de voir sa Réponse.Les entrées de la propriété!" Je pense qu'il est utile de donner un essai 😉
  • Malheureusement, il semble que ce n'est pas exact - la documentation pour la DirectoryOperationException sur MSDN @ msdn.microsoft.com/en-us/library/ms141745.aspx, fait mention de la Réponse de la propriété comme un DirectoryResponse classe qui n'a pas de propriété Entrées documentées ni dans Intellisense. Merci pour la tentative sérieuse mais on dirait que ce n'est pas la bonne chose à essayer dans cette situation. Mais j'en mentionnerai que je l'ai Googlé avant de posté ici et a constaté la même suggestion partout, il a juste ne semble pas à s'appliquer à un SearchRequest mais peut s'appliquer à un autre type de Demande.
  • Trouvé - je besoin de jeter l'Exception.Réponse à une SearchResponse - puis-je obtenir tout mes résultats!