System.DirectoryServices.AccountManagement
.NET 4.5でアカウントを作成し、それらにプロパティを設定しています。要件の1つは、グループメンバーシップ(プライマリグループを含む)をテンプレートアカウントからコピーすることです。コードには次のものが含まれます。
foreach (var group in userPrincipal.GetGroups()) {
var groupPrincipal = (GroupPrincipal) @group;
if (groupPrincipal.Sid != templatePrimaryGroup.Sid) {
groupPrincipal.Members.Remove(userPrincipal);
groupPrincipal.Save();
}
}
これは約90%の時間で機能します。残りの時間は、次のように失敗します。
System.DirectoryServices.DirectoryServicesCOMException was unhandled HResult=-2147016656 Message=There is no such object on the server.
Source=System.DirectoryServices ErrorCode=-2147016656 ExtendedError=8333 ExtendedErrorMessage=0000208D: NameErr: DSID-03100213, problem 2001 (NO_OBJECT), data 0, best match of: 'OU=Whatever,DC=domain,DC=local`
GetGroups
電話で。私の推測では、次にアクセスする前にユーザーが完全に作成されていない、ある種の競合状態があります。診断ログから、毎回同じドメインコントローラーに対して実行していることがわかります(PrincipalContext
予想に一致するように同じドメインコントローラーを使用しているため)。したがって、レプリケーションの問題ではありません。
私の推測は正確ですか?これを処理する良い方法はありますか?私はただ投げ込むことができましたSleep
が、それはせいぜい警官のようで、最悪の場合は壊れやすいようです。では、正しいことは何ですか?