我有时会出现以下情况例外:不能使用具有与其基础RCW分开 COM对象已经与其基础RCW分离的COM对象无法使用 - 为什么会发生?
示例代码:
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便有如下:
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;
}
}
这是我的代码的简化版本。有时会出现异常,有时候不会。大多数情况下,当我尝试设置UserAccountControl值时会发生这种情况。 有谁知道可能是什么原因?
我发现这个错误发生在我处理DirectoryEntry时AdUser被创建并且我仍然试图使用AdUser对象。然而在上面的代码中并不是这种情况。 DirectoryEntry有可能以某种方式处置它自己吗?
当我尝试在许多活动目录对象上执行操作时,我也会得到这个异常。例如,当我尝试为一千个用户设置SecurityDescriptor时,每200-300个用户就会遇到这个错误。当我在建立新连接后重试操作时,我不会感到异常。消息是raceonrcwcleanup被检测到。我的应用程序不是多线程的。
任何帮助,将不胜感激。
** + 1 **为解决你自己的问题,发布解决方案,更重要的是解决我来到这里的完全相同的问题。 – 2014-04-20 17:17:25