IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

Connexion LDAP et Background worker


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Janvier 2006
    Messages
    250
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Janvier 2006
    Messages : 250
    Par défaut Connexion LDAP et Background worker
    Bonjour a tous ,

    J'ai réalisé une connexion à une LDAP qui m'affiche la liste des loggin Windows dans une Combobox.
    Cette connexion + filtre freezaient mon application, j'ai donc décider de mettre ma sub dans un Background worker :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TacheDeFond.RunWorkerAsync()
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    41
    42
    43
    44
    45
    46
     Private Function TacheDeFond_DoWork(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles TacheDeFond.DoWork
    
               'Connexion à l'annuaire LDAP
                Dim monEntryLDAP As New DirectoryEntry(CheminLdap, _
                                                   NomConnectLdap, _
                                                  PassConnectLdap)
    
                Dim maRecherche As DirectorySearcher = New DirectorySearcher(monEntryLDAP)
                'On filtre uniquement sur les utilisateurs
                maRecherche.Filter = "(objectclass=user)"
                'Utilisateurs à lister
                Dim lesUsers As DirectoryEntry
    
                'Affichage des utilisateurs listé
                Try
                    'Boucle permettant a mon curseur d'avancer tant qu'il y a des resultats et d'implémenter ma ListView
                    For Each result As SearchResult In maRecherche.FindAll
                        'On récupère l'entrée trouvée lors de la recherche
                        lesUsers = result.GetDirectoryEntry
    
                        'Remplissage du comboBox si et sulement si les valeurs login,nom sont renseignées
                        If lesUsers.Properties("sAMAccountName").Value <> "" _
                        And lesUsers.Properties("sn").Value <> "" Then
                            monTabResultLdap(0) = (lesUsers.Properties("sAMAccountName").Value) 'Login                      
                        End If
                    Next
    
                    Console.WriteLine(monTabResultLdap)
                    Return monTabResultLdap
    
                    'Fermeture de la connexion
                    monEntryLDAP.Close()
    
                Catch ex As Exception
                    MsgBox("Erreur lors de la connexion Ldap 1 : " & ex.Message & " " & ex.ToString)
                    Return ""
                    Exit Function
                End Try
    
            Catch ex As Exception
                MsgBox("Erreur lors de la connexion Ldap2 " & ex.Message & " " & ex.ToString)
                Return ("")
                Exit Function
            End Try
    
        End Function
    Dans la mesure ou mon Interface est construite dans un autre threade je ne peut plus interagir avec ma combo box du début.

    J'ai donc décidé de faire une fonction qui me retournerai un tableau incrémenté par les résultats de la requête ldap.

    Mais je n'y arrive pas (voir ligne ne gras sur le code)

    Voici comment je l'exploiterais si j'y arrive
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub TacheDeFond_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles TacheDeFond.RunWorkerCompleted
            'Quand le code d'arrière plan est terminé la procédure RunWorkerCompleted est exécutée.
            'On ajoute les données dans la combo box
            CB_LdapUser.Items.Add(monTabResultLdap)
            MsgBox("terminé")
        End Sub
    Pourriez vous m'apporter de l'aide .
    Mecri

  2. #2
    Membre éclairé
    Inscrit en
    Janvier 2006
    Messages
    250
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Janvier 2006
    Messages : 250
    Par défaut
    J'ai plus ou moins réussi, enfin plutôt moins que plus en exploitant le e.Result de la manière suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    e.Result &= (lesUsers.Properties("sAMAccountName").Value)
    Ce qui donne dans la combobox :
    User1User2User3User4....

  3. #3
    Membre éclairé
    Inscrit en
    Janvier 2006
    Messages
    250
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Janvier 2006
    Messages : 250
    Par défaut
    Re,
    Bon j'ai bidouillé le truc , cela fonctionne mais c'est très grossier si quelqu'un passe et qu'il trouve mieux qu'il n'hésite pas à me tirer les oreilles !

    Pour récapituler :
    J'ai une connexion et requête (filtre) sur une Base LDAP qui me retourne les résultat dans une combobox.
    Dans la mesure cette manipulation prend en gros 1700ms cela freezai mon interface pendant ce laps de temps.
    Donc j'ai décidé d'utiliser l'outil BackgroundWorker.
    Seulement le 2ème thread ne sait pas inter-agir avec le premier (celui qui contient l'UI)
    Donc je retourne ma suite de nom dans la variable e.Result cocatennée avec un "/"
    Puis dans la sub RunWorkerCompleted je transforme la chaine e.Result en tableau via split
    Je parcours mon tableau et inser les items dans le combobox


    Voici le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Private Sub TacheDeFond_DoWork
    PARTIE DE CONNEXION LDAP NON AFFICHEE
     Try
                    'Boucle permettant a mon curseur d'avancer tant qu'il y a des resultats et d'implémenter ma ListView
                    For Each result As SearchResult In maRecherche.FindAll
                        'On récupère l'entrée trouvée lors de la recherche
                        lesUsers = result.GetDirectoryEntry
     
                        'Remplissage du comboBox si et seulement si les valeurs login,nom sont renseignées
                        If lesUsers.Properties("sAMAccountName").Value <> "" _
                        And lesUsers.Properties("sn").Value <> "" Then
                            e.Result &= "/" & (lesUsers.Properties("sAMAccountName").Value) 'Login
                        End If
                    Next
    Ce qui donne ci je fait un console.writln (e.result) :
    /User1/User2/User3/User4/User5.....

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Private Sub TacheDeFond_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles TacheDeFond.RunWorkerCompleted
            'Quand le code d'arrière plan est terminé la procédure RunWorkerCompleted est exécutée.
            'On ajoute les données dans la combo box
            Dim mots As String
            Dim TableauDeMots() As String
            mots = e.Result.ToString
            TableauDeMots = mots.Split("/"c)
            For Each nom As String In TableauDeMots
                Me.CB_LdapUser.Items.Add(nom)
            Next
            Me.CB_LdapUser.Enabled = True
        End Sub

    Voila.

Discussions similaires

  1. arret Background worker thread
    Par ricky78 dans le forum Windows Forms
    Réponses: 3
    Dernier message: 06/02/2007, 12h15
  2. connexion ldap dans le livre jsp professionnel
    Par mjihanne dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 27/05/2006, 16h46
  3. Connexion LDAP (active directory)
    Par Mateache dans le forum ASP
    Réponses: 2
    Dernier message: 09/05/2006, 13h33
  4. connexion Ldap et recupération d'information
    Par lechatmagik dans le forum ASP
    Réponses: 13
    Dernier message: 31/10/2005, 10h44
  5. [LDAP] connexion LDAP
    Par abertaud dans le forum API standards et tierces
    Réponses: 15
    Dernier message: 20/07/2005, 09h49

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo