2016-07-03 5 views
-1

で発生しました。未処理の例外は、私はエラーを取得しています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です(新しいDirectoryEntry(LDAPSpecial&Replace(Processing_DataResults.Rows.Item(Master_Loop)(16)、 "/"、 "\ /")))** –

+0

コードブロックは、理由のためのコードブロックです。 :) –

+0

誰もいない? :/ まあ、私はそれが難しいと感じた唯一の人ではないことを嬉しく思います。 –

答えて

0

私は自分の問題が何であるかを知りました。他の誰かがこの問題に遭遇したときに起こりました。 何が起こっていたのかは、操作が前のコードを実行してADに新しい接続を作成する操作だった場合、コードの後半でADに接続しているコード(ドメイン名のみ)です。アクティブなディレクトリに接続すると、使用可能なドメインコントローラが選択されます(希望のアクション)。これは、DCがダウンした場合、または負荷が余分な負荷を処理するには大きすぎる場合に役立ちます。 とにかく、2番目の接続が別のDCに接続されることがありました。両方の接続が同じDC上にないとエラーになる可能性があります。これは、ちょうど1秒前に行われたばかりで、変更がまだそのDCに複製されていなかったためです。 私の問題は、LDAPからdnshostnameを取得し、2番目の接続で最初の接続を使用しているdcをロードすることです。

関連する問題