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

Vít*_*ins 5 c# asp.net directoryservices active-directory

我正在尝试这个代码:

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;
    }
}
Run Code Online (Sandbox Code Playgroud)

哪个应该检查用户是否属于某个组(“traveladmin”),但我得到

System.DirectoryServices.AccountManagement.PrincipalServerDownException

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

srvr = "LDAP://192.168.56.101/CN=Users,DC=estagioit,DC=local"
Run Code Online (Sandbox Code Playgroud)

PS:我在另一种方法上使用相同的 srvr,它正在工作和连接。

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

Vít*_*ins 7

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

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

在这种情况下。

如果你查看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://前缀)

正如这个答案中所见。

  • `this` 答案是一个空白链接 (11认同)

lpi*_*.eu 4

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

srvr = "DCESTAGIO"
Run Code Online (Sandbox Code Playgroud)

  • 您如何知道 FQDN“DC=estagioit,DC=local”会转换为 Windows 2000 之前的域名“DCESTAGIO”?是否有固定的规则来翻译这些名称,或者该信息是否包含在现已删除的评论中?像这样,在类似情况下很难复制这个 QA。 (8认同)
  • 你能解释一下吗? (3认同)