连接到 AD 的奇怪错误 - visual basic

Posted

技术标签:

【中文标题】连接到 AD 的奇怪错误 - visual basic【英文标题】:Odd errors with connecting to AD - visual basic 【发布时间】:2018-06-11 19:47:37 【问题描述】:

有几个奇怪的问题。我连接到 AD 以获取活动用户及其组的列表并将其写入 SQL 表中。代码是用 Visual Basic 编写的。有时我会收到一个错误“服务器上没有这样的对象”。但是当我尝试在 5 分钟后运行相同的进程时 - 一切正常。换句话说,我每次运行该过程时都不会收到该错误,只是偶尔。 问题的另一部分 - 如果我尝试从 sql 表中提取数据并使用报告创建 excel 文件 - 在运行上面的过程之后立即

我收到了错误:

System.AccessViolationException 未处理 H结果=-2147467261 Message=试图读取或写入受保护的内存。这通常表明其他内存已损坏。 源=系统.数据 堆栈跟踪: 在 System.Data.OleDb.DataSourceWrapper.InitializeAndCreateSession(OleDbConnectionString 常量,SessionWrapper & sessionWrapper) 在 System.Data.OleDb.OleDbConnectionInternal..ctor(OleDbConnectionString 常量,OleDbConnection 连接) 在 System.Data.OleDb.OleDbConnectionFactory.CreateConnection(DbConnectionOptions 选项,DbConnectionPoolKey poolKey,对象 poolGroupProviderInfo,DbConnectionPool 池,DbConnection owningObject) 在 System.Data.ProviderBase.DbConnectionFactory.CreateConnection(DbConnectionOptions options, DbConnectionPoolKey poolKey, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningConnection, DbConnectionOptions userOptions)...

如果我停止处理,请关闭 Windows 应用程序,重新打开并仅运行导出到 excel - 运行良好。 我认为也许内存没有释放,但我在处理结束时确实有命令从 AD 中提取数据:

dirEntry.Dispose()
dirEntry = Nothing

连接AD后是否有清除内存的特殊命令?是什么导致了这 2 个零星的错误?谢谢!

根据请求 - 添加部分代码。 - 获取用户和组列表,然后处理 dirEntry:

Public Sub ListAllADUsers(dirEntry As DirectoryEntry) 将用户列表调暗为新集合() 将用户名列表变暗为新集合() 将结果作为 SearchResultCollection 变暗

    Dim dirSearcher As DirectorySearcher = New DirectorySearcher("(&(objectCategory=Person)(objectClass=user))")
    dirSearcher.SearchRoot = dirEntry
    dirSearcher.PropertiesToLoad.Add("SAMAccountName")
    dirSearcher.PropertiesToLoad.Add("givenname")
    dirSearcher.PropertiesToLoad.Add("cn")
    dirSearcher.ServerTimeLimit = New TimeSpan(0, 10, 0)
    dirSearcher.PageSize = 10000
    dirSearcher.ClientTimeout = TimeSpan.FromMinutes(12000)

    oresult = dirSearcher.FindAll()
    For Each result In oresult
        If Not result.GetDirectoryEntry.Properties("cn").Value Is Nothing Then
           UserList.Add(result.GetDirectoryEntry.Properties("cn").Value, result.GetDirectoryEntry.Properties("SAMAccountName").Value)
           GetGroupsAD(result.GetDirectoryEntry.Properties("SAMAccountName").Value.ToString(), result.GetDirectoryEntry.Properties("cn").Value.ToString())
            If StopFlag = 1 Then Exit Sub
        End If
    Next

    dirSearcher.Dispose()
End Sub

【问题讨论】:

我们能看到你的代码的 sn-p 吗?即使它已经过消毒,也会有所帮助。 【参考方案1】:

好吧 - 解决了。有我打算使用但决定不使用的收藏列表。一旦我将其注释掉 - 一切正常。谁知道它会像那样搞砸一切?关闭。因此,如果有人会使用我的代码 - 只需删除集合...

【讨论】:

以上是关于连接到 AD 的奇怪错误 - visual basic的主要内容,如果未能解决你的问题,请参考以下文章

尝试连接到数据库时出现奇怪的错误

在 Ubuntu 中使用 Python 连接到 MySQL(奇怪的错误)

无法再使用 Visual Studio 2008 连接到 Visual Studio Team Services

从 Visual Studio 连接到 SQL Server 2005

连接到 Azure AD 时,UWP 中的 OIDCClient“指定的协议未知”异常

Visual Studio 2010无法连接到MySql服务器