c# – 我应该使用域名还是域控制器名称绑定到Active Directory?

我正在使用C#和C,通过LDAP提供程序与Active Directory进行通信的应用程序.该应用程序在Windows 2003,2008和2008 R2上运行.我正在使用看起来像这样的绑定字符串:

LDAP://mydomain.com/CN=Fred,DC=mydomain,DC=com
LDAP://server.mydomain.com/CN=Fred,DC=mydomain,DC=com.

应用程序负责目录中的读写操作.例如,在一个场景中,它会创建一个新OU,然后在该新OU中创建多个用户和组.在另一种情况下,它向交互式用户呈现目录视图,并允许用户创建新的组或用户帐户.

到目前为止,我一直在使用基于域的绑定(上面的第一个示例绑定字符串),基于MSDN的建议:

Under most circumstances, binding should not be unnecessarily tied to a single server. Active Directory Domain Services support serverless binding, which means that Active Directory can be bound to on the default domain without specifying the name of a domain controller

当域上有多个域控制器时,会出现此问题;我现在称他们为Lefty和Righty.如果我使用LDAP://mydomain.com/blah绑定到目录,我隐式连接到Lefty或Righty.以下是发生的情况的示例场景:

>绑定到mydomain.com的根目录. Active Directory胆量选择Lefty作为要与之通信的服务器.
>创建一个名为Container的新OU. OU是在Lefty上创建的.
>尝试绑定到新OU. Active Directory guts选择Righty作为要与之通信的服务器,因此绑定失败,因为Righty不知道新的OU.
>等待10-15秒再次尝试绑定.与任一服务器通信时绑定成功.

在步骤3中,不严格要求重新绑定,但在某些情况下涉及两个不同的可执行文件,因此我无法共享IAD或DirectoryEntry.在内部我认为Active Directory的内核正在使用DsGetDcName来选择要与之通信的服务器,并且其中的文档讨论了如何选择域控制器以及如何缓存该信息.不幸的是,据我所知,这不是应用程序可以真正控制的东西.在某些情况下,我看到应用程序始终连接到一个域控制器或另一个域控制器,但在其他情况下,应用程序似乎在域控制器之间来回切换(如上所述),并且事情不起作用.

解决实际问题:这只是基于域的绑定的基本限制吗?我认为如果我直接绑定到特定的域控制器,问题就会消失,但这会显着地复杂化应用程序代码,所以我希望避免它.

解决方法:

这是ldap服务器复制的固有问题.我从未使用过c#api.
我曾在linux上使用eDirectory.在创建对象后,如果要引用它,最好的选择是坚持使用服务器/ DC.

为什么它会使应用程序复杂化?写一个功能来拿起一台服务器.功能
应该对域进行dns查找(example.com)如果你有多个域控制器,它将返回所有的ip地址,拿起一个正在运行的地址(ping,ldap root dse search)并将其返回给调用者.

只有在遇到上述问题时才尝试使用此功能.在其他地方只需坚持使用域名.

相关文章

Windows2012R2备用域控搭建 前置操作 域控主域控的主dns:自...
主域控角色迁移和夺取(转载) 转载自:http://yupeizhi.blo...
Windows2012R2 NTP时间同步 Windows2012R2里没有了internet时...
Windows注册表操作基础代码 Windows下对注册表进行操作使用的...
黑客常用WinAPI函数整理之前的博客写了很多关于Windows编程的...
一个简单的Windows Socket可复用框架说起网络编程,无非是建...