1

我在程序中有这段代码,用于查询 Windows 域用户所属的组。

    public void GetGroupNames(string userName, List<string> result)
    {
        using (PrincipalContext pc = new PrincipalContext(ContextType.Domain))
        {
            UserPrincipal uPrincipal = UserPrincipal.FindByIdentity(pc, userName);
            if (uPrincipal != null)
            {
                PrincipalSearchResult<Principal> srcList = uPrincipal.GetGroups();
                foreach (Principal item in srcList)
                {
                    result.Add(item.ToString());
                }
            }
        }
    }

当我刚刚实现它并正在调试它时,

UserPrincipal uPrincipal = UserPrincipal.FindByIdentity(pc, userName);

总是为空。然后我不得不关闭视觉工作室来做其他事情。当我回来时,打开了视觉工作室,这段代码就可以工作了。几天前,组织出现网络问题,那段时间我没有关闭我的电脑。网络恢复正常后,我可以正常连接到互联网,我可以远程桌面到服务器等,这证明 Active Directory 身份验证已完成,但上面的代码未能找到给定名称的 UserPrinical,例如我自己的。然后我重新启动PC,代码工作正常。我对这件事感到很困惑。有没有人可以为此提供一个很好的解释?

4

1 回答 1

0

UserPrincipal 在跨域场景中存在一些已知错误。当它再次发生时,看看你是否可以从你的机器上解析组。当组成员所在的 SID 无法解析时,我也遇到了问题。

于 2012-12-05T20:50:50.207 回答