Active directory. Impossible de l'utiliser plusieurs fois
Bonjour,
Dans la série j'ai des problèmes, je vous présente.....
Donc, je suis entrain de créer un site intranet dans lequel je dois me connecter à un Active Directory.
Pour me faciliter la tâche, je me suis créé une classe me permettant d'interagir avec l'active directory.
Voici ma classe :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
| Imports Microsoft.VisualBasic
Imports System.DirectoryServices
Public Class ActiveDirectory
Private o_Directory As DirectoryEntry
Public Sub New(ByVal TheAdresseAccess As String, ByVal TheLogin As String, ByVal ThePassword As String)
Try
o_Directory = New DirectoryEntry(TheAdresseAccess, TheLogin, ThePassword)
Catch ex As Exception
MsgBox("Impossible de se connecter à l'ActiveDirectory")
End Try
End Sub
Public Function ChercherUtilisateur(ByVal TheLoginUtilisateur As String) As DirectoryEntry
Dim ARetourner As DirectoryEntry = Nothing
' On créer un objet permettant de faire une recherche dans l'active directory
Dim o_search As DirectorySearcher = New DirectorySearcher(o_Directory)
' On applique un filtre de recherche pour récupérer l'utilisateur qu'on veut
o_search.Filter = "(SAMAccountName=" & TheLoginUtilisateur & ")"
Dim Resultat As SearchResult = Nothing
' On exécute la recherche et on ne récupère que le premier élément retourné
Resultat = o_search.FindOne()
ARetourner = Resultat.GetDirectoryEntry
Return ARetourner
End Function
Public Function NomComplet(ByVal TheLogin As String) As String
Dim ARetourner As String = ""
Dim o_DirectoryEntry As DirectoryEntry
o_DirectoryEntry = Me.ChercherUtilisateur(TheLogin)
With o_DirectoryEntry
ARetourner = String.Concat(UCase(.Properties("sn").Value), " ", .Properties("givenName").Value)
End With
Return ARetourner
End Function
End Class |
Que j'utilise de cette manière :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13
| Dim o_ActiveDirectoryUser As ActiveDirectory = Nothing
' On se connecte au serveur active directory
o_ActiveDirectoryUser = New ActiveDirectory("LDAP://" & WebConfigurationManager.AppSettings("ActiveDirectoryServeur"), _
WebConfigurationManager.AppSettings("ActiveDirectoryLogin"), _
WebConfigurationManager.AppSettings("ActiveDirectoryPassword"))
' On récupère le résultat retourné par la recherche effectuée via le login de l'utilisateur
Dim Resultat As DirectoryEntry = o_ActiveDirectoryUser.ChercherUtilisateur(Session("Utilisateur"))
Session("NomUser") = Resultat.Properties("sn").Value
Session("PrenomUser") = Resultat.Properties("givenName").Value
Session("EmailUser") = Resultat.Properties("mail").Value
Session("CompletUser") = o_ActiveDirectoryUser.NomComplet(Session("Utilisateur")) |
Donc, lorsqu'un utilisateur arrive sur la page, je me connecte à l'active directory et je récupère quelques données. Jusque là, tout va bien.
Mais, lorsque j'arrive sur une page et que je dois effectuer une recherche dans l'active directory, j'ai une erreur à a ligne
Code:
Resultat = o_search.FindOne()
Cette erreur est :
Citation:
L'exception COMException n'a pas été géré par le code utilisateur
Erreur non spécifiée
Et cette erreur s'applique quand j'appelle la méthode NomComplet qui utilise ChercheUtilisateur ou même lorsque j'appelle directement la méthode ChercheUtilisateur. Mais, comme je l'ai précisé plus haut, cette erreur ne se déclare qu'à la seconde utilisation de l'active directory, quel que soit la page d'appel.
Merci d'avance à ceux qui pourront m'aider.
EDIT : Problème résolu, j'avais oublié de mettre le protocole dans la seconde utilisation de l'active directory.