收到“无法联系服务器”。当尝试访问活动目录时

问题描述 投票:0回答:3

我正在尝试这段代码:

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:如果这不是解决此问题的最佳方法,我愿意接受建议。

c# asp.net active-directory directoryservices
3个回答
7
投票

问题是“主要语境”怎么写……应该是:

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答案所示。


5
投票

在您的情况下,只需将

srvr
更改为:

srvr = "DCESTAGIO"

0
投票

我也有同样的问题。当我们切换到 Windows 11 时它停止工作

我正在使用

var domainctx = new PrincipalContext(ContextType.Domain, Environment.UserDomainName);

在 Windows 10 中工作正常。我猜它停止工作了,因为在 Windows 11 中我们使用 Microsoft 用户而不是本地 Active Directory。

Environment.UserDomainName
是类似
"DCESTAGIO"

的域

Windows 11 的解决方案是

using System.DirectoryServices.ActiveDirectory;
var domainctx = new PrincipalContext(ContextType.Domain, Domain.GetCurrentDomain().ToString());

Domain.GetCurrentDomain()
返回域名的 FQDN,例如
"estagioit.local"

© www.soinside.com 2019 - 2024. All rights reserved.