私は時々、次の例外を取得:その基礎となるRCWから分離された COMオブジェクトが基になるRCWから分離されたCOMオブジェクトは使用できません - どうしてですか?
サンプル・コードを使用することはできません。
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;
}
}
:
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は次のようになりますこれは私のコードの簡略化されたバージョンです。例外が時々現れることがあります。ほとんどの場合、UserAccountControl値を設定しようとしています。 誰かが理由を知ることができますか?
このエラーは、AdUserを作成したDirectoryEntryを処分してもAdUserオブジェクトを使用しようとしているときに発生することがわかりました。しかし、これは上記のコードでは当てはまりません。 DirectoryEntryが何とか自分自身を処理する可能性はありますか?
多くのアクティブなディレクトリオブジェクトに対して操作を実行しようとすると、この例外が発生します。たとえば、1000人のユーザーに対してSecurityDescriptorを設定しようとすると、200〜300人のユーザーごとにこのエラーが発生します。新しい接続を確立した後に操作を再試行すると、例外が発生しません。 raceonrcwcleanupが検出されましたというメッセージです。私のアプリはマルチスレッドではありません。
ご協力いただければ幸いです。
** + 1 **はあなた自身の質問を解決し、解決策を投稿し、さらに重要なことに私がここに来たのと全く同じ問題を解決します。 –