2016-01-04 1 views
0

J'essaie de créer un code vb.net pour une requête simple via LDAP mais ayant un problème et ne peut pas trouver où c'est.LDAP Vb.net simple requête

   Dim ldapServerName As String = "xxx.test.intranet.xxx.ca" 
       Dim oRoot As DirectoryEntry = New DirectoryEntry("LDAP://" & ldapServerName & "/c=ca, DC=xxx,DC=corp,DC=xxx,DC=ca") 
       oRoot.Username = "ou=Tool,ou=applications,o=xxx,c=ca" 
       oRoot.Password = "[email protected]" 

       Dim LDAPSearcher As New DirectorySearcher() 
       LDAPSearcher.Filter = "(&(employeenumber=6012589))" 

       Dim SearchResult As SearchResult = LDAPSearcher.FindOne() 
       Dim UserEntry As DirectoryEntry = SearchResult.GetDirectoryEntry() 
       EDTEST.Text = UserEntry.Properties("employeenumber").Value.ToString 

il me donne une erreur en disant que l'objet n'est pas valide. La variable chercheur est en fait vide, donc cela a à voir avec ma requête.

Ceci est ma première fois avec LDAP et j'ai essayé une partie de la solution que j'ai pu trouver sur le net mais rien ne fonctionne jusqu'à maintenant.

Error: Object not set to an instance of an object.

Répondre

0

À moins que vous ajoutez un autre attribut à la recherche par, vous n'avez pas besoin ET opérateur dans votre syntaxe de filtre - une recherche simplement (employeenumber=6012589) devrait fonctionner très bien.

Si vous avez un autre attribut que vous souhaitez effectuer une recherche par, la syntaxe du filtre serait similaire à ce que vous avez maintenant, seulement avec l'attribut supplémentaire:

(&(employeenumber=6012589)(objectClass=user))

EDIT:

J'ai mis en place un exemple en utilisant les espaces de noms de niveau inférieur System.DirectoryServices et System.DirectoryServices.Protocols. Cela aide à briser les fonctions de connexion et de recherche, et fournira également un meilleur contexte en cas d'erreur. Pour l'exemple, j'ai remplacé toutes mes variables par celles que vous utilisez dans votre question. J'ai testé cela par rapport à notre propre instance Active Directory sur le port 389 non sécurisé en utilisant mes creds et un domaine de base similaire à celui que vous utilisez.

Imports System.DirectoryServices.Protocols 
Imports System.Net 

Module Module1 

Sub Main() 

    ' setup your creds, domain, and ldap prop array 
    Dim username As String = "ou=Tool,ou=applications,o=xxx,c=ca" 
    Dim pwd As String = "[email protected]" 
    Dim domain As String = "DC=xxx,DC=corp,DC=xxx,DC=ca" 
    Dim propArray() As String = {"employeenumber"} 

    ' setup your ldap connection, and domain component 
    Dim ldapCon As LdapConnection = New LdapConnection("xxx.test.intranet.xxx.ca:389") 
    Dim networkCreds As NetworkCredential = New NetworkCredential(username, pwd, domain) 

    ' configure the connection and bind 
    ldapCon.AuthType = AuthType.Negotiate 
    ldapCon.Bind(networkCreds) 

    ' if the above succceeded, you should now be able to issue search requests directly against the directory 
    Dim searchRequest = New SearchRequest(domain, "(employeenumber=6012589)", SearchScope.Subtree, propArray) 

    ' issue the search request, and check the results 
    Dim searchResult As SearchResponse = ldapCon.SendRequest(searchRequest) 
    Dim searchResultEntry As SearchResultEntry 

    If (searchResult.Entries.Count > 0) Then ' we know we've located at least one match from the search 

     ' if you're only expecting to get one entry back, get the first item off the entries list 
     searchResultEntry = searchResult.Entries.Item(0) 

     ' continue to do whatever processing you wish against the returned SearchResultEntry 

    End If 

End Sub 

End Module 
+0

Cela ne fonctionne toujours pas comme prévu. c'est comme si elle ne pouvait pas trouver ce à quoi elle est destinée. Cependant, si j'utilise "Admin LDAP" et que je le connecte, je peux clairement trouver que l'entrée est là. –

+0

Hmm ... vous savez que ce n'est peut-être pas une mauvaise idée de casser un peu votre logique. Je peux mettre un exemple VB.Net de la façon dont je fais cela en C# - question rapide, essayez-vous de vous connecter en toute sécurité sur LDAPS (port 636), ou LDAP non sécurisé sur le port 389? – X3074861X