erste Angaben über die Benutzer aus dem AD zu langsam ist
Im mit Sie den folgenden code, um eine Reihe von Informationen über Mitarbeiter aus bestimmten Abteilungen und die Rückgabe einer Liste von AD...
Während es funktioniert, es scheint sehr langsam sein, ist es effizienter Weg, um verschiedene user-details von AD?
public static List<Employee> GetEmployeeListForDepartment(string departpment)
{
using (HostingEnvironment.Impersonate())
{
PrincipalContext ctx = new PrincipalContext(ContextType.Domain, domain);
GroupPrincipal gp = GroupPrincipal.FindByIdentity(ctx, departpment);
PrincipalSearchResult<Principal> members = gp.GetMembers();
List<Employee> employees = new List<Employee>();
foreach (var member in members)
{
var emp = CreateEmployee(member);
employees.Add(emp);
}
return employees.OrderBy(x => x.FirstName).ToList();
}
}
private static Employee CreateEmployee(Principal member)
{
if (member != null)
{
DirectoryEntry de = (member.GetUnderlyingObject() as DirectoryEntry);
if (de != null)
{
string mobile = de.Properties.Contains("mobile") ? de.Properties["mobile"][0].ToString() : "";
string title = de.Properties.Contains("description") ? de.Properties["description"][0].ToString() : "";
//ETC ETC...
return new Employee { etc.. };
}
}
return new Employee();
}
- Sie haben die option Zwischenspeichern der Ergebnisse selbst.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dein problem ist, dass Sie mit System.DirectoryServices.Kontoverwaltung... Und ich hasse es zu sagen, es ist leider die Wahrheit. Der Weg Kontoverwaltung funktioniert unter der Haube ist, dass es läuft einem separaten LDAP-Abfrage zum abrufen jedes Element separat. So beim Durchlaufen der Mitglieder macht es einen separaten Rückruf über LDAP für jedes Mitglied. Das, was Sie wollen zu tun, sondern ist eine LDAP-Abfrage ausführen, die mit System.DirectoryServices.DirectorySearcher.
Meine Vermutung ist, dass die Abteilung ist eine Gruppe, die basieren auf, wie Sie es verwenden. Hier ist, wie ich es tun würde. (mein code ist in VB.Net... sorry). Stellen Sie sicher, um Sie den vollqualifizierten DN für Ihre Gruppe, oder informieren Sie sich im Voraus und stecken Sie ihn in die Abfrage.
Sollten Sie in der Lage sein, die Verwendung des Active Directory-API direkt.
Meisten ist es unter 'System.DirectoryServices'
Habe ich keinen code zu hand, genau das zu tun, was Sie brauchen, aber ich habe einen Artikel auf meinem Blog über ein Jahr zurück, dass zeigt, wie das erstellen von lokalen Benutzerkonten im AD, die alle verwendet die gleichen Baugruppen, wie erforderlich, um Benutzerinformationen zu erhalten.
http://shawtyds.wordpress.com/2010/12/08/a-little-bit-of-ldap-here-there/
HINWEIS: AD jedoch von seiner Natur aus sehr langsam ist, so gibt es eine gute chance, dass Sie möglicherweise nicht in der Lage sein schneller, wenn Sie ein großes Verzeichnis.