【问题标题】:Get Active directory user asynchonously异步获取 Active Directory 用户
【发布时间】:2015-03-23 10:43:30
【问题描述】:

如何异步查询 Active Directory。 我有一些代码可以同步获取用户

    Dim UserName as string = ""
    Dim Password as string = ""
    Dim LDAPPath As String = ""
    Dim DirectoryE As DirectoryEntry = New DirectoryEntry(LDAPPath, UserName, Password)

    Dim RootDSE As DirectoryServices.DirectoryEntry = globalroot
    Dim objSearch As New System.DirectoryServices.DirectorySearcher(RootDSE)
    Dim oResult As DirectoryServices.SearchResultCollection = Nothing
    'objSearch.PropertiesToLoad.Add("uid")
    'objSearch.PropertiesToLoad.Add("cn")


    objSearch.Filter = "(&(objectcategory=user))"
    objSearch.PageSize = 500
    oResult = objSearch.FindAll
    For Each ldentry As SearchResult In oResult
        Console.WriteLine(ldentry.Properties("cn")(0).ToString)
    Next
    Console.ReadLine()

【问题讨论】:

    标签: vb.net active-directory async-await


    【解决方案1】:

    假设您使用的是 .NET 4.5。将您的代码更改为返回 SearchResultCollection 的函数:

     Private Function GetAllUsers() As SearchResultCollection
            Dim UserName As String = ""
            Dim Password As String = ""
            Dim LDAPPath As String = ""
            Dim DirectoryE As DirectoryEntry = New DirectoryEntry(LDAPPath, UserName, Password)
    
            Dim RootDSE As DirectoryServices.DirectoryEntry = New DirectoryEntry("LDAP://RootDSE")
            Dim objSearch As New System.DirectoryServices.DirectorySearcher(RootDSE)
            Dim oResult As DirectoryServices.SearchResultCollection = Nothing
            'objSearch.PropertiesToLoad.Add("uid")
            'objSearch.PropertiesToLoad.Add("cn")
    
            objSearch.Filter = "(&(objectcategory=user))"
            objSearch.PageSize = 500
            Return objSearch.FindAll
    
        End Function
    

    然后这样称呼它:

     Private Async Sub Button15_Click(sender As Object, e As EventArgs) Handles Button15.Click
    
            For Each ldentry As SearchResult In Await Task.Run(Function() GetAllUsers())
                Console.WriteLine(ldentry.Properties("cn")(0).ToString)
            Next
            Console.ReadLine()
        End Sub
    

    【讨论】:

    • Await 是否会导致单独的任务在后台运行。 Await task.run (function) 也是只返回 SearchResultCollection 还是我们可以返回 List(of Objects)
    • Await 导致程序异步等待任务返回。只要你把它包装在一个任务中,你就可以返回任何你喜欢的东西
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-06-26
    • 1970-01-01
    • 2017-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多