如何使用Principal Context连接到Active Directory?

Vít*_*ins 13 c# active-directory principalcontext

我已经有一段时间了,我总是得到:

System.DirectoryServices.AccountManagement.PrincipalServerDownException

我认为这意味着我的连接设置(连接字符串)是错误的.

当我在Active Directory所在的计算机上的cmd上写"dsquery server"时,我得到:

"CN = DCESTAGIO,CN =服务器,CN =事先默认站点名称,CN =站点,CN =配置,DC = estagioit,DC =本地"

我通过以下方式尝试了以下连接:

1:

PrincipalContext thisPrincipalContext = new PrincipalContext(ContextType.Domain, "192.168.56.101", "DC=estagioit,DC=local");
Run Code Online (Sandbox Code Playgroud)

2:

PrincipalContext thisPrincipalContext = new PrincipalContext(ContextType.Domain, "192.168.56.101/DC=estagioit,DC=local");
Run Code Online (Sandbox Code Playgroud)

3:

PrincipalContext thisPrincipalContext = new PrincipalContext(ContextType.Domain, "192.168.56.101/CN=DCESTAGIO,DC=estagioit,DC=local");
Run Code Online (Sandbox Code Playgroud)

4:

PrincipalContext thisPrincipalContext = new PrincipalContext(ContextType.Domain, "192.168.56.101/CN=DCESTAGIO,CN=SERVERS,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=estagioit,DC=local");
Run Code Online (Sandbox Code Playgroud)

5:

PrincipalContext thisPrincipalContext = new PrincipalContext(ContextType.Domain, "LDAP://192.168.56.101/CN=Users,DC=estagioit,DC=local");
Run Code Online (Sandbox Code Playgroud)

还有其他一些方法......

关于什么是错的以及我如何使这种连接起作用的任何想法?

PS:ip是正确的,因为我用它来ping并且它正在工作.

PPS:我真的非常需要这个工作,如果你有任何建议他们都欢迎.

mar*_*c_s 29

如果你看一下PrincipalContext构造函数的文档,应该很清楚:

public PrincipalContext(ContextType contextType, string name)
Run Code Online (Sandbox Code Playgroud)

要么

public PrincipalContext(ContextType contextType, string name, string container)
Run Code Online (Sandbox Code Playgroud)

所以你基本上需要:

  • 您的上下文类型(这里ContextType.Domain)
  • 域名(只需尝试"Netbios"名称,例如"YOURDOMAIN" - 或为"默认"域留下NULL)
  • 可选的容器(作为LDAP路径 - "区分"名称,完整路径但没有任何LDAP://前缀)

所以尝试这样的事情:

PrincipalContext thisPrincipalContext = 
    new PrincipalContext(ContextType.Domain, "ESTAGIOIT");
Run Code Online (Sandbox Code Playgroud)

要么

PrincipalContext thisPrincipalContext = 
    new PrincipalContext(ContextType.Domain, null);  // default domain
Run Code Online (Sandbox Code Playgroud)

要么

PrincipalContext thisPrincipalContext = 
    new PrincipalContext(ContextType.Domain, "ESTAGIOIT", "DC=estagioit,DC=local");
Run Code Online (Sandbox Code Playgroud)

要么

PrincipalContext thisPrincipalContext = 
    new PrincipalContext(ContextType.Domain, null, "CN=Users,DC=estagioit,DC=local");
Run Code Online (Sandbox Code Playgroud)