C# 获得;无法联系服务器。”;尝试访问active directory时

C# 获得;无法联系服务器。”;尝试访问active directory时,c#,asp.net,active-directory,directoryservices,C#,Asp.net,Active Directory,Directoryservices,我正在尝试以下代码: public bool isTravelAdmin(string srvr, string usr, string password) { System.Diagnostics.Debug.WriteLine("I'm in isTravelAdmin!"); PrincipalContext domainctx = new PrincipalContext(ContextType.Domain, srvr); UserPrincipal use

我正在尝试以下代码:

public bool isTravelAdmin(string srvr, string usr, string password)
{
    System.Diagnostics.Debug.WriteLine("I'm in isTravelAdmin!");

    PrincipalContext domainctx = new PrincipalContext(ContextType.Domain, srvr);

    UserPrincipal userPrincipal = UserPrincipal.FindByIdentity(domainctx, IdentityType.SamAccountName, usr);

    bool isMember = userPrincipal.IsMemberOf(domainctx, IdentityType.Name, "traveladmin");

    if (isMember)
    {
        System.Diagnostics.Debug.WriteLine("This user is INDEED a member of that group");
        return true;
    }
    else
    {
        System.Diagnostics.Debug.WriteLine("This user is *NOT* member of that group");
        return false;
    }
}
它应该检查用户是否属于某个组(“traveladmin”),但我得到

System.DirectoryServices.AccountManagement.PrincipalServerDownException

知道为什么以及如何解决吗?顺便说一下:

srvr = "LDAP://192.168.56.101/CN=Users,DC=estagioit,DC=local"
PS:我在另一种方法上使用了相同的srvr,它正在工作和连接

PSS:如果这不是最好的方法,我愿意接受建议。

问题在于“主要上下文”是如何编写的。。。应该是:

PrincipalContext thisPrincipalContext = new PrincipalContext(ContextType.Domain, "DCESTAGIO");
在这种情况下

如果您查看
PrincipalContext
构造函数的文档,应该非常清楚:

public PrincipalContext(ContextType contextType, string name)

所以你基本上需要:

  • 您的上下文类型(此处:
    ContextType.Domain
  • 域名(请尝试使用“Netbios”名称,例如“YOURDOMAIN”- 或为“默认”域保留空值)
  • (可选)容器(作为LDAP路径-一个“可分辨”名称, 完整路径,但没有任何
    LDAP://
    前缀)

如答案所示。

在您的情况下,只需将您的
srvr
更改为:

srvr = "DCESTAGIO"

答案为空白链接您如何知道FQDN“DC=estagioit,DC=local”转换为Windows 2000之前的域名“DCESTAGIO”?是否有固定的规则来翻译这些名称,或者这些信息是否包含在评论中,现在已被删除?这样,很难在类似的情况下复制此QA。
srvr = "DCESTAGIO"