Trouver tous les utilisateurs Ldap à l'aide de asp.net c#
Ci-dessous mon code. Je veux récupérer tous les utilisateurs dont le prénom ou nom de famille est le même dans une grille. Mais ici, je suis de mieux en le nom lui-même dans la grille de tri.
Je suis en train de faire de l'utilisateur un choix de saisir le nom d'utilisateur. Une fois qu'il entrez le nom que je devrais être en mesure de rechercher dans Active Directory et le retour de tous les utilisateurs à commencer par celle du texte saisi par l'utilisateur.
Je devrais être en mesure d'afficher toutes les possibilités, par exemple si l'utilisateur entre adam
je doit lui donner la possibilité de choisir s'il veut voir adam josef
ou adam john
e.t.c.
Toute suggestion sera utile.
Voici le code
DirectoryEntry de = new DirectoryEntry("ADConnection");
DirectorySearcher deSearch = new DirectorySearcher(de);
//set the search filter
deSearch.SearchRoot = de;
String UserName = txt_To.Text;
deSearch.Filter = "(&(objectCategory=user)(GivenName=*" + UserName + "*))";
string[] arrPropertiesToLoad = { "sn" };
deSearch.PropertiesToLoad.AddRange(arrPropertiesToLoad);
SearchResultCollection sResultColl = deSearch.FindAll();//Getting undefined error
Gridview1.DataSource = sResultColl ;
Gridview1.DataBind();
Ici est la trace de la pile
[COMException (0x80004005): erreur non spécifiée]
Système.DirectoryServices.DirectoryEntry.Bind(Boolean throwIfFail) +439513
Système.DirectoryServices.DirectoryEntry.Bind() +36
Système.DirectoryServices.DirectoryEntry.get_AdsObject() +31
Système.DirectoryServices.DirectorySearcher.FindAll(Boolean findMoreThanOne) +78
Système.DirectoryServices.DirectorySearcher.FindAll() +9
Le certificat.WebForm4.btngo0_Click(Object sender, EventArgs e) dans
C:\Users\273714\documents\visual studio
2010\Projects\Certificate\Certificate\WebForm4.aspx.cs:202
Système.Web.L'INTERFACE utilisateur.Contrôles webcontrols.Bouton.OnClick(EventArgs e) +118
Système.Web.L'INTERFACE utilisateur.Contrôles webcontrols.Bouton.RaisePostBackEvent(String
eventArgument) +112
Système.Web.L'INTERFACE utilisateur.Contrôles webcontrols.Bouton.Système.Web.L'INTERFACE utilisateur.IPostBackEventHandler.RaisePostBackEvent(String
eventArgument) +10
Système.Web.L'INTERFACE utilisateur.Page.RaisePostBackEvent(IPostBackEventHandler
sourceControl, Chaîne eventArgument) +13
Système.Web.L'INTERFACE utilisateur.Page.RaisePostBackEvent(NameValueCollection postData)
+36 Système.Web.L'INTERFACE utilisateur.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
+5563
- Quelle erreur avez-vous?
- Si le nom d'utilisateur que je donne est sam, dans la grille reçois comme Un M sur la ligne verticale. Si je décommenter les lignes reçois pas défini exception.
- que voulez-vous dire non défini exception? Pourriez-vous montrer cette exception et de la pile?
- La trace de la pile est dans la question. J'ai modifié le code en décommentant les lignes. Où suis-je gng mal? 🙁
- Appel de la pile- > Certificate.DLL!Le certificat.WebForm4.btngo0_Click(object sender, System.EventArgs e) de la Ligne 202 + 0xa octets C#
- Regardez ceci: stackoverflow.com/questions/7892655/...
- Ce exactement est votre
ADConnection
? Pouvez-vous nous montrer le chemin d'accès LDAP complet vous utilisez là?
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser un
PrincipalSearcher
et une "requête-par-exemple" principal de faire votre recherche:Si vous ne l'avez pas déjà absolument lire l'article MSDN La gestion de Répertoire les entités de Sécurité dans le .NET Framework 3.5 qui montre bien comment l'utiliser au mieux les nouvelles fonctionnalités de
System.DirectoryServices.AccountManagement
. Ou voir le La documentation MSDN sur le Système.DirectoryServices.AccountManagement espace de noms.Bien sûr, selon votre besoin, vous pouvez spécifier d'autres propriétés de la requête "par exemple" utilisateur principal à vous de créer:
DisplayName
(typiquement: prénom + espace + nom de famille)SAM Account Name
- votre Windows/AD nom de compteUser Principal Name
- votre "[email protected]" le nom du style deVous pouvez spécifier les propriétés sur le
UserPrincipal
et les utiliser comme "de la requête par l'exemple" pour votrePrincipalSearcher
.Mise à jour: si vous voulez trouver un tas d'utilisateurs et de lier ceux d'un gridview, utilisez ce code:
Ne pas itérer deux fois plus de toutes les données renvoyées! (comme dans votre commentaire
) .....
Mise à jour #2: avec la S. DS.SUIS des cours, vous toujours obtenir l'ensemble de la classe il n'y a rien que vous pouvez faire à ce sujet. Si vous souhaitez sélectionner seulement spécifiques attributs LDAP, vous devez utiliser votre approche originale.
À partir de cette approche, vous devez assurez-vous de créer la racine de la
DirectorySearcher
sur un conteneur - par exemple, laOU=Users
conteneur - PAS sur une ANNONCE en particulier objet d'un utilisateur.Donc essayez d'utiliser ce code:
Cela fonctionne?
.FindAll()
de nouveau - pour chaque utilisateur...... voir ma mise à jourDirectoryEntry
) - est-ce que le travail?ldap://
- qui ne fonctionne pas - vous DOIT utilisation MAJUSCULE! EssayezLDAP:// .....
- est-ce que le travail?PrincipalContext
fonctionne... pouvez-vous essayer à nouveau le code? Lorsque lePrincipalContext
objet est créé - pouvez-vous regarder ses propriétés? Où est-il raccordé? Ce serveur LDAP et/ou d'un conteneur? Peut-être que vous essayez de lier à un conteneur qui n'est pas valide ou n'est pas accessible pour vous .....distinguishedName
est toujours retourné - vous ne pouvez pas désactiver cette fonction.Fonctionne très bien