1

Active Directory (AD DS) 具有“只读域控制器”(RODC) 的概念。可能为了向后兼容,默认是忽略只读域控制器:您必须明确指定您允许连接到只读域控制器。

在我们的 C# 代码中,我们在两个地方看到了这一点。一种是在创建新的System.DirectoryServices.DirectoryEntry时:通过设置System.DirectoryServices.AuthenticationTypes.ReadonlyServer标志可以轻松解决问题,该标志允许使用 RODC。

我的问题是如何使用System.DirectoryServices.AccountManagement命名空间中的类为以下代码实现相同的功能:

using (PrincipalContext ctx = new PrincipalContext(ContextType.Domain))
using (UserPrincipal userPrincipal = UserPrincipal.FindByIdentity(
                                                      ctx,
                                                      IdentityType.SamAccountName,
                                                      ...))
{
    // ...
}

因为我们观察到此代码忽略了任何只读域控制器。

(请注意,上述问题与MSDN“Visual C# General”论坛上题为“通过 System.DirectoryServices.AccountManagement 从 C# 应用程序连接到只读域控制器 (RODC) 的问题”的主题中发布的问题完全相同。)

4

1 回答 1

1

最有可能发生的事情是由于此功能不存在而被忽略了。如果没有仔细查看,那么它是故意的,因为 RODC 不允许您执行存在于 a 上的许多方法UserPrincipal(例如 ChangePassword、Delete 等)。我想,要解决这个问题,微软必须创建一个新的ReadOnlyUserPrincipal. 更重要的是,为什么将命名空间中的任何内容实例化为只读是有意义的,System.DirectoryServices.AccountManagement因为命名空间似乎不仅仅是一个只读服务(因为缺少更好的术语),除非不存在只读版本(是这样)。因此,使用非只读服务并将其指向只读源是行不通的。

于 2012-06-07T14:25:10.450 回答