如何使用 Principal Context 连接到 Active Directory?
How to connect to Active Directory with Principal Context?
我在这方面已经有一段时间了,而且我总是得到:
System.DirectoryServices.AccountManagement.PrincipalServerDownException
我认为这意味着我的连接设置(连接字符串)是错误的。
当我在 Active Directory 所在的计算机上的 cmd 上写入 "dsquery server" 时,我得到:
"CN=DCESTAGIO,CN=SERVERS,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=estagioit,DC=local"
我试过以下连接方式:
1:
PrincipalContext thisPrincipalContext = new PrincipalContext(ContextType.Domain, "192.168.56.101", "DC=estagioit,DC=local");
2:
PrincipalContext thisPrincipalContext = new PrincipalContext(ContextType.Domain, "192.168.56.101/DC=estagioit,DC=local");
3:
PrincipalContext thisPrincipalContext = new PrincipalContext(ContextType.Domain, "192.168.56.101/CN=DCESTAGIO,DC=estagioit,DC=local");
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");
5:
PrincipalContext thisPrincipalContext = new PrincipalContext(ContextType.Domain, "LDAP://192.168.56.101/CN=Users,DC=estagioit,DC=local");
以及其他一些方式...
关于哪里出了问题以及如何使此连接正常工作有什么想法吗?
PS: ip 是正确的,因为我用它来 ping 并且它正在工作。
PPS:如果您有任何建议,我真的非常需要这个尽快工作。
如果您查看 PrincipalContext
构造函数的文档,应该会很清楚:
public PrincipalContext(ContextType contextType, string name)
或
public PrincipalContext(ContextType contextType, string name, string container)
所以你基本上需要:
- 您的上下文类型(此处:
ContextType.Domain
)
- 域名(仅尝试 "Netbios" 名称,例如 "YOURDOMAIN" - 或为 "default" 域保留 NULL)
- 可选的容器(作为 LDAP 路径 - "distinguished" 名称,完整路径但没有任何
LDAP://
前缀)
所以尝试这样的事情:
PrincipalContext thisPrincipalContext =
new PrincipalContext(ContextType.Domain, "ESTAGIOIT");
或
PrincipalContext thisPrincipalContext =
new PrincipalContext(ContextType.Domain, null); // default domain
或
PrincipalContext thisPrincipalContext =
new PrincipalContext(ContextType.Domain, "ESTAGIOIT", "DC=estagioit,DC=local");
或
PrincipalContext thisPrincipalContext =
new PrincipalContext(ContextType.Domain, null, "CN=Users,DC=estagioit,DC=local");
我在这方面已经有一段时间了,而且我总是得到:
System.DirectoryServices.AccountManagement.PrincipalServerDownException
我认为这意味着我的连接设置(连接字符串)是错误的。
当我在 Active Directory 所在的计算机上的 cmd 上写入 "dsquery server" 时,我得到:
"CN=DCESTAGIO,CN=SERVERS,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=estagioit,DC=local"
我试过以下连接方式:
1:
PrincipalContext thisPrincipalContext = new PrincipalContext(ContextType.Domain, "192.168.56.101", "DC=estagioit,DC=local");
2:
PrincipalContext thisPrincipalContext = new PrincipalContext(ContextType.Domain, "192.168.56.101/DC=estagioit,DC=local");
3:
PrincipalContext thisPrincipalContext = new PrincipalContext(ContextType.Domain, "192.168.56.101/CN=DCESTAGIO,DC=estagioit,DC=local");
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");
5:
PrincipalContext thisPrincipalContext = new PrincipalContext(ContextType.Domain, "LDAP://192.168.56.101/CN=Users,DC=estagioit,DC=local");
以及其他一些方式...
关于哪里出了问题以及如何使此连接正常工作有什么想法吗?
PS: ip 是正确的,因为我用它来 ping 并且它正在工作。
PPS:如果您有任何建议,我真的非常需要这个尽快工作。
如果您查看 PrincipalContext
构造函数的文档,应该会很清楚:
public PrincipalContext(ContextType contextType, string name)
或
public PrincipalContext(ContextType contextType, string name, string container)
所以你基本上需要:
- 您的上下文类型(此处:
ContextType.Domain
) - 域名(仅尝试 "Netbios" 名称,例如 "YOURDOMAIN" - 或为 "default" 域保留 NULL)
- 可选的容器(作为 LDAP 路径 - "distinguished" 名称,完整路径但没有任何
LDAP://
前缀)
所以尝试这样的事情:
PrincipalContext thisPrincipalContext =
new PrincipalContext(ContextType.Domain, "ESTAGIOIT");
或
PrincipalContext thisPrincipalContext =
new PrincipalContext(ContextType.Domain, null); // default domain
或
PrincipalContext thisPrincipalContext =
new PrincipalContext(ContextType.Domain, "ESTAGIOIT", "DC=estagioit,DC=local");
或
PrincipalContext thisPrincipalContext =
new PrincipalContext(ContextType.Domain, null, "CN=Users,DC=estagioit,DC=local");