2016-07-03 38 views
-1

我得到一个错误:型“System.AccessViolationException”未处理的异常发生在System.DirectoryServices.dll程序

An unhandled exception of type 'System.AccessViolationException' occurred in System.DirectoryServices.dll

随机地在移动用户屈指可数。

奇怪的是,似乎没有任何押韵或理由说明它们何时发生,我在TRY中试过,最近因为某种原因它开始崩溃应用程序。在调试器中,它们弹出,您可以继续完成它们并完成线程,“失败”操作工作,并在下一个周期重新运行移动。

< --Code剪断了 - >

If Action_Exe = "Update" Then 
    If IsDBNull(Processing_DataResults.Rows.Item(Master_Loop)(16)) Then 
     Trace.WriteLine("Error in datatable. NULL found.") 
     Trace.WriteLine("Record: " & Master_Loop) 
     Trace.WriteLine("User: " & Processing_DataResults.Rows.Item(Master_Loop)(1)) 
     Trace.WriteLine("AD Current Path: " & newUser.Path) 
     'Update to try again 
     CycleSQLQUERY.CommandText = "UPDATE [dbo].[AMS_Processing_Table] SET [Process_FLAG] = 3 WHERE [TrackingID] = '" & Processing_DataResults.Rows.Item(Master_Loop)(0).ToString & "';" 
     WinEventLog.WriteEntry("Account Processing Thread: Null Var Found in Datatable. - " & Processing_DataResults.Rows.Item(Master_Loop)(1) & "-" & Master_Loop, EventLogEntryType.FailureAudit, 1614) 
     Continue For 
    End If 
    Trace.WriteLine("OLD: " & Replace(newUser.Path, newUser.Name & ",", "")) 
    Trace.WriteLine("New: " & LDAPSpecial & Replace(Processing_DataResults.Rows.Item(Master_Loop)(16), "/", "\/")) 
    If LCase(Replace(newUser.Path, newUser.Name & ",", "")) <> LCase(LDAPSpecial & Replace(Processing_DataResults.Rows.Item(Master_Loop)(16), "/", "\/")) Then 
     Thread.Sleep(100) 
     Dim UserObjPath As String = newUser.Path 
     Dim SuccessfulMove As Boolean = True 
     Try 
      newUser.MoveTo(New DirectoryEntry(LDAPSpecial & Replace(Processing_DataResults.Rows.Item(Master_Loop)(16), "/", "\/"))) 
     Catch CatchALL As Exception 
      Trace.WriteLine(CatchALL.GetType) 
      Trace.WriteLine("OLD: " & Replace(newUser.Path, newUser.Name & ",", "")) 
      Trace.WriteLine("New: " & LDAPSpecial & Replace(Processing_DataResults.Rows.Item(Master_Loop)(16), "/", "\/")) 
      WinEventLog.WriteEntry("Account Processing Thread: Failed to move user object in AD. - " & Processing_DataResults.Rows.Item(Master_Loop)(1) & " - " & CatchALL.Message & "; OLD: " & LCase(Replace(newUser.Path, newUser.Name & ",", "")) & "; NEW:" & LCase(LDAPSpecial & Replace(Processing_DataResults.Rows.Item(Master_Loop)(16), "/", "\/")), EventLogEntryType.FailureAudit, 1611) 
      SuccessfulMove = False 
      CycleSQLQUERY.CommandText = "UPDATE [dbo].[AMS_Processing_Table] SET [Process_FLAG] = 3 WHERE [TrackingID] = '" & Processing_DataResults.Rows.Item(Master_Loop)(0).ToString & "';" 
      Try 
       CycleSQLQUERY.ExecuteNonQuery() 
      Catch ex_SQL As Exception 
       'addin 5/3/16 
      End Try 
      Continue For 
     End Try 
     If SuccessfulMove = True Then 

     Dim ChangeLineCount As Int64 

任何不过,建议,提示,或修复将不胜感激。 这是一个多线程应用程序,特别是这个部分。我试图拨出线程数量和相同的问题。

+0

看来你不能大胆的代码。我得到错误的位置在** newUser.MoveTo(New DirectoryEntry(LDAPSpecial&Replace(Processing_DataResults.Rows.Item(Master_Loop)(16),“/”,“\ /”)))** –

+0

代码块是一个原因的代码块。 :) –

+0

没有人? : -/ 好吧,我想我很高兴我不是唯一一个发现它很困难的人。 –

回答

0

因此,我发现我的问题是什么,因为任何人都会遇到这个问题。 发生了什么是我在代码中稍后在代码中连接到AD的代码的早期版本,如果该操作是移动它将运行上面的代码,创建一个到AD的新连接。当连接到活动目录时,它将选择一个可用的域控制器(所需的操作),如果DC发生故障或者负载太大以至于无法处理额外负载时,这是有用的。 反正第二个连接有时会连接到另一个DC。当两个连接都不在同一个DC上时,它会出错,很可能是因为这些更改没有复制到该DC,因为它们刚刚发生在不到一秒之前。 所以,我的问题的解决方法是我加载第一个连接所使用的dc,方法是从LDAP中拉出dnshostname,然后在第二个连接中使用它。

相关问题