Frage

In einer meiner Anwendungen frage ich Active Directory ab, um eine Liste aller Benutzer unterhalb eines bestimmten Benutzers zu erhalten (mithilfe der Funktion „Direkte Berichte“).Im Grunde genommen wird der Name der Person in AD nachgeschlagen und dann werden die direkt unterstellten Personen gelesen.Aber dann muss das Tool für jeden direkt unterstellten Mitarbeiter die direkt unterstellten Mitarbeiter überprüfen.Oder abstrakter:Das Tool verwendet eine Person als Wurzel des Baums und geht dann den gesamten Baum entlang, um die Namen aller Blätter zu erhalten (es können mehrere Hundert sein).

Jetzt geht es mir natürlich um die Leistung, da dies einige Male durchgeführt werden muss.Meine Idee ist, das manuell zwischenzuspeichern (im Wesentlichen einfach alle Namen in eine lange Zeichenfolge einzufügen, diese irgendwo zu speichern und sie einmal am Tag zu aktualisieren).

Aber ich frage mich nur, ob es eine elegantere Möglichkeit gibt, die Informationen zuerst abzurufen und sie dann zwischenzuspeichern, möglicherweise mithilfe von etwas im System.DirectoryServices-Namespace?

War es hilfreich?

Lösung

Um die Kontrolle über die Eigenschaften zu übernehmen, die zwischengespeichert werden sollen, können Sie „RefreshCache()“ aufrufen und die Eigenschaften übergeben, die Sie behalten möchten:

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

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

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

Andere Tipps

Active Directory ist beim Speichern von Informationen recht effizient und der Abruf sollte keine allzu großen Leistungseinbußen darstellen.Wenn Sie die Namen wirklich speichern möchten, möchten Sie sie wahrscheinlich in einer Art Baumstruktur speichern, damit Sie die Beziehungen aller Personen sehen können.Abhängig von der Anzahl der Personen können Sie auch täglich alle benötigten Informationen abrufen und dann alle Anfragen anhand Ihrer zwischengespeicherten Kopie abfragen.

AD übernimmt diese Art des Cachings für Sie. Machen Sie sich also keine Sorgen, es sei denn, die Leistung stellt ein Problem dar.Ich habe Software, die solche Dinge den ganzen Tag über in einem Unternehmensintranet ausführt, das Tausende von Zugriffen pro Stunde benötigt, und musste in diesem Bereich noch nie die Leistung optimieren.

Hängt davon ab, wie aktuell die Informationen sein sollen.Wenn du haben müssen Wenn Sie die allerneuesten Daten in Ihrem Bericht verwenden, ist eine direkte Abfrage von AD sinnvoll.Und ich stimme zu, dass AD ziemlich robust ist, ein typischer dedizierter AD-Server wird im normalen Tagesbetrieb tatsächlich nur sehr wenig genutzt Am besten erkundigen Sie sich jedoch bei Ihrer IT-Abteilung bzw. Ihrem Supportmitarbeiter.

Eine Alternative besteht darin, ein tägliches Skript zu verwenden, um die AD-Daten in eine CSV-Datei zu übertragen und/oder in eine SQL-Datenbank zu importieren.(Oracle verfügt über eine SELECT CONNECT BY-Funktion, mit der automatisch mehrstufige Hierarchien innerhalb einer Ergebnismenge erstellt werden können.MSSQL kann mit etwas Rekursion (IIRC) etwas Ähnliches tun.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top