Question

Dans l'une de mes applications, j'interroge Active Directory pour obtenir une liste de tous les utilisateurs situés en dessous d'un utilisateur donné (en utilisant la fonction "Rapports directs").Donc, en gros, étant donné le nom de la personne, il est recherché dans AD, puis les subordonnés directs sont lus.Mais ensuite, pour chaque subordonné direct, l’outil doit vérifier les subordonnés directs des subordonnés directs.Ou, plus abstrait :L'outil utilisera une personne comme racine de l'arbre, puis parcourra l'arbre complet pour obtenir les noms de toutes les feuilles (il peut y en avoir plusieurs centaines).

Maintenant, ma préoccupation est évidemment la performance, car cela doit être fait plusieurs fois.Mon idée est de mettre cela manuellement en cache (essentiellement, il suffit de mettre tous les noms dans une longue chaîne, de les stocker quelque part et de les mettre à jour une fois par jour).

Mais je me demande simplement s'il existe un moyen plus élégant d'obtenir d'abord les informations, puis de les mettre en cache, éventuellement en utilisant quelque chose dans l'espace de noms System.DirectoryServices ?

Était-ce utile?

La solution

Afin de prendre le contrôle des propriétés que vous souhaitez mettre en cache, vous pouvez appeler « RefreshCache() » en transmettant les propriétés que vous souhaitez conserver :

System.DirectoryServices.DirectoryEntry entry = new System.DirectoryServices.DirectoryEntry();               

// Push the property values from AD back to cache.

entry.RefreshCache(new string[] {"cn", "www" });

Autres conseils

Active Directory est assez efficace pour stocker des informations et la récupération ne devrait pas trop nuire aux performances.Si vous avez vraiment l'intention de stocker les noms, vous souhaiterez probablement les stocker dans une sorte de structure arborescente, afin de pouvoir voir les relations de toutes les personnes.En fonction du nombre de personnes, vous pouvez également extraire quotidiennement toutes les informations dont vous avez besoin, puis interroger toutes les demandes sur votre copie en cache.

AD effectue ce type de mise en cache pour vous, alors ne vous inquiétez pas à moins que les performances ne deviennent un problème.J'ai un logiciel qui fait ce genre de chose toute la journée sur un intranet d'entreprise qui reçoit des milliers de visites par heure et je n'ai jamais eu à ajuster les performances dans ce domaine.

Cela dépend de la mise à jour souhaitée des informations.Si tu doit avoir les toutes dernières données de votre rapport, puis une interrogation directement depuis AD est raisonnable.Et je conviens que AD est assez robuste, un serveur AD dédié typique est en fait très peu utilisé dans les opérations quotidiennes normales. mais il est préférable de vérifier auprès de votre service informatique/personne d'assistance.

Une alternative consiste à disposer d'un script quotidien pour transférer les données AD dans un fichier CSV et/ou les importer dans une base de données SQL.(Oracle dispose d'une fonctionnalité SELECT CONNECT BY qui peut créer automatiquement des hiérarchies à plusieurs niveaux dans un ensemble de résultats.MSSQL peut faire une chose similaire avec un peu de récursion IIRC).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top