Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/302.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 我应该使用域名或域控制器名称绑定到Active Directory吗? 我正在研究一个应用程序,它通过LDAP提供程序,使用C++和C++来与ActiveDirectory对话。该应用程序在Windows 2003、2008和2008 R2上运行。我使用的绑定字符串如下所示:_C#_Windows_Active Directory_Ldap - Fatal编程技术网

C# 我应该使用域名或域控制器名称绑定到Active Directory吗? 我正在研究一个应用程序,它通过LDAP提供程序,使用C++和C++来与ActiveDirectory对话。该应用程序在Windows 2003、2008和2008 R2上运行。我使用的绑定字符串如下所示:

C# 我应该使用域名或域控制器名称绑定到Active Directory吗? 我正在研究一个应用程序,它通过LDAP提供程序,使用C++和C++来与ActiveDirectory对话。该应用程序在Windows 2003、2008和2008 R2上运行。我使用的绑定字符串如下所示:,c#,windows,active-directory,ldap,C#,Windows,Active Directory,Ldap,LDAP://mydomain.com/CN=Fred,DC=mydomain,DC=com LDAP://server.mydomain.com/CN=Fred,DC=mydomain,DC=com 应用程序负责目录中的读写操作。例如,在一个场景中,它创建一个新的OU,然后在该新OU中创建多个用户和组。在另一个场景中,它向交互用户显示目录视图,并允许用户创建新的组或用户帐户 到目前为止,根据以下建议,我一直在使用基于域的绑定(上面的第一个绑定字符串示例): 在大多数情况下,绑定不应该不必要地绑

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

应用程序负责目录中的读写操作。例如,在一个场景中,它创建一个新的OU,然后在该新OU中创建多个用户和组。在另一个场景中,它向交互用户显示目录视图,并允许用户创建新的组或用户帐户

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

在大多数情况下,绑定不应该不必要地绑定到单个服务器。Active Directory域服务支持无服务器绑定,这意味着可以将Active Directory绑定到默认域,而无需指定域控制器的名称

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

  • 绑定到mydomain.com的根目录。Active Directory用户选择Lefty作为与之对话的服务器
  • 创建一个名为Container的新OU。OU是在Lefty上创建的
  • 尝试绑定到新的OU。Active Directory用户选择Righty作为与之对话的服务器,因此绑定失败,因为Righty不知道新的OU
  • 等待10-15秒,然后再次尝试绑定。与任一服务器对话时绑定成功
  • 在步骤3中,并不严格要求重新绑定,但在某些场景中涉及两个不同的可执行文件,因此我无法共享
    IADs
    DirectoryEntry
    。在内部,我认为Active Directory guts是用来选择与哪个服务器对话的,关于它如何选择域控制器以及如何缓存该信息的文档也有一些讨论。不幸的是,据我所知,应用程序并不能真正控制它。在某些情况下,我看到应用程序始终连接到一个域控制器或另一个域控制器,但在其他情况下,应用程序似乎在域控制器之间来回切换(如上所述),因此无法工作


    回到实际问题:这只是基于域的绑定的一个基本限制吗?我认为如果我直接绑定到特定的域控制器,问题就会消失,但这会使应用程序代码变得非常复杂,因此我希望避免它。

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

    为什么它会使应用程序复杂化?编写一个函数来选择服务器。功能 应该对域(example.com)执行dns查找如果您有多个域控制器,它将返回所有ip地址,选择正在运行的ip地址(ping、ldap根dse搜索)并将其返回给调用者


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

    首先:我要说的是@Kalyan:您编写了一个方法,首先在工作开始时选择一个域控制器,并将其存储在共享位置,然后所有EXE都使用它

    第二个:您可能可以从域控制器强制复制,首先在该域控制器上使用SyncReplicaFrom创建OU。。。方法在
    System.directoryservice.activedirectoryservice
    中的
    DirectoryServer
    类上,或使用具有函数的互操作。我不确定这第二条路是不是一条好路

    备注:从纯LDAP的角度来看,它可能在RootDSE或其他地方存在一个属性,强制复制为“
    schemaUpdateNow
    ”强制模式重新加载