C#System.DirectoryServices.AccountManagement未知错误(0x80005000)UserPrincipal.IsMemberOf()

dig*_*dig 4 c# active-directory

与以下MSDN主题中的问题类似:http://social.msdn.microsoft.com/Forums/en-MY/csharplanguage/thread/4c9fea6c-1d0a-4733-a8ac-e3b78d10e999

我正在尝试验证给定用户是否是组的成员,而我们现有的功能解决方案太慢(13-16秒),我正在尝试加快速度.我目前有:

public bool IsMemberAD(string userName, string groupName)
{
    var pc = new System.DirectoryServices.AccountManagement.PrincipalContext(System.DirectoryServices.AccountManagement.ContextType.Domain);
    var user = System.DirectoryServices.AccountManagement.UserPrincipal.FindByIdentity(pc, System.DirectoryServices.AccountManagement.IdentityType.SamAccountName,
                                                 userName.ToLower());
    var group = System.DirectoryServices.AccountManagement.GroupPrincipal.FindByIdentity(pc, groupName);

    if (group == null || user == null) return false;

    return user.IsMemberOf(group);    
}
Run Code Online (Sandbox Code Playgroud)

使其有趣的是,它仅在用户不在组中时才返回错误,而是在目标组内的组成员中返回错误.

例如:

Steve和Sam是两个用户,GroupParent和GroupChild是两个用户.Steve和GroupChild是GroupParent的成员.Sam是GroupChild的成员.如果我在(Steve,GroupParent)上调用此函数,则返回true.如果我打电话给它(Sam,GroupParent),我会收到一个错误.如果我打电话给它("fdkjskghkf",GroupParent)它返回false.

我将上面的一篇文章与类似问题联系起来,但他的解决方案对我没有用,我仍然遇到同样的错误.想法?

Dal*_*ore 5

由于乔恩Theriault 这里将下面的代码解决了这个问题对我来说.

string strName = System.Security.Principal.WindowsIdentity.GetCurrent().Name; // "MW\\dalem"
// This is here because of a .Net error that gets 0x80005000 on "isUser = user.IsMemberOf(groupU);"
string domainName = strName.Split('\\')[0]; 
var pc = new PrincipalContext(ContextType.Domain, domainName);
Run Code Online (Sandbox Code Playgroud)