活动目录和多个 DC 的复制问题
本文关键字:DC 复制 问题 活动 | 更新日期: 2023-09-27 18:36:31
我们在使用活动目录和移动/重命名 OU 时遇到问题。仅当我们在两个域控制器之间复制时,才会发生这种情况。我们得到的例外是:
System.ServiceModel.FaultException:服务器上没有这样的对象。(HRESULT的例外:0x80072030)
当我们尝试在活动目录中移动和重命名 OU 时,我们会收到此错误消息的变体。这是有问题的代码:
PrincipalContext context = GetPrincipalContext();
using (UserPrincipal principal = UserPrincipal.FindByIdentity(context, IdentityType.Guid, id.ToString()))
{
if (principal == null)
{
throw new InvalidOperationException();
}
string oldEmail = principal.EmailAddress;
principal.EmailAddress = newEmail;
principal.Save();
DirectoryEntry entry = principal.GetUnderlyingObject() as DirectoryEntry;
DirectoryEntry targetDirectoryEntry = null;
string target = null;
// Access the underlying DirectoryEntry to rename it:
try
{
if (entry == null)
{
throw new InvalidOperationException();
}
entry.RefreshCache();
entry.Rename(string.Format("CN={0}", newEmail));
// Move the DirectoryEntry to the correct location.
target = BuildOrganizationalUnitName(newEmail);
targetDirectoryEntry = FindDirectoryEntry(target);
if (targetDirectoryEntry == null)
{
throw new InvalidOperationException();
}
entry.MoveTo(targetDirectoryEntry);
entry.CommitChanges();
}
catch (Exception e)
{
// do some logging
}
finally
{
if (entry != null)
{
entry.Dispose();
}
if (targetDirectoryEntry != null)
{
targetDirectoryEntry.Dispose();
}
}
}
所以我有两个问题:
- 上面的代码有什么问题吗,它试图移动并重命名 OU?
- 如果没有,是否有任何方法可以确保两个 DC 在移动/重命名后保持同步?
您可能应该在尝试移动重命名之前提交对重命名的更改。
entry.Rename(string.Format("CN={0}", newEmail));
entry.CommitChanges(); // add this line