获取“无法联系服务器”。尝试访问活动目录时

时间:2015-04-07 14:03:36

标签: 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 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:如果这不是解决这个问题的最佳方式,我可以接受建议。

2 个答案:

答案 0 :(得分:3)

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

PrincipalContext thisPrincipalContext = new PrincipalContext(ContextType.Domain, "DCESTAGIO");

在这种情况下。

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

public PrincipalContext(ContextType contextType, string name)

public PrincipalContext(ContextType contextType, string name, string container)

所以你基本上需要:

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

this回答。

答案 1 :(得分:1)

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

即可
srvr = "DCESTAGIO"