volte ottengo la seguente eccezione: oggetto COM che è stato separato dal suo RCW sottostante non può essere utilizzatoL'oggetto COM che è stato separato dal relativo RCW sottostante non può essere utilizzato: perché succede?
codice di esempio:
using (AdOrganizationalUnit organizationalUnit = new AdOrganizationalUnit(ADHelper.GetDirectoryEntry(ouAdDn)))
{
using (AdUser user = organizationalUnit.AddUser(commonName))
{
//set some properties
user.Properties[key].Add(value);
user.CommitChanges();
user.SetPassword(password); //it is set using Invoke
//must be set after creating user
user.Properties["UserAccountControl"].Value = 512;
user.CommitChanges();
}
}
ADUser assomiglia a questo:
public class AdUser : DirectoryEntry
{
public AdUser(DirectoryEntry entry)
: base(entry.NativeObject)
{
}
public bool SetPassword(string password)
{
object result = this.Invoke("SetPassword", new object[] { password });
return true;
}
}
Questa è la versione semplificata del mio codice. L'eccezione a volte compare, a volte no. Il più delle volte succede quando sto cercando di impostare il valore di UserAccountControl. Qualcuno sa quale potrebbe essere la ragione?
Ho scoperto che questo errore si verifica quando dispongo DirectoryEntry con cui è stato creato AdUser e sto ancora tentando di utilizzare l'oggetto AdUser. Tuttavia questo non è il caso nel codice pubblicato sopra. È possibile che DirectoryEntry si adatti in qualche modo?
Ho anche questa eccezione quando provo a eseguire l'operazione su molti oggetti di directory attivi. Ad esempio, quando provo a impostare SecurityDescriptor per mille utenti, ottengo questo errore ogni 200-300 utenti. Quando riprovo l'operazione dopo aver stabilito nuove connessioni, non ottengo eccezioni. Il messaggio è stato rilevato raceonrcwcleanup. La mia app non è multithread.
Qualsiasi aiuto sarebbe apprezzato.
** + 1 ** per risolvere la propria domanda, postare la soluzione e, soprattutto, risolvere esattamente lo stesso problema per cui sono venuto qui. –