查询AD会抛出System.Runtime.InteropServices.COMException

时间:2014-03-25 15:38:19

标签: visual-studio c#-4.0 active-directory iis-express asp.net-4.5

我的团队在VS 2013中使用IIS Express进行调试,在查询AD组的Active Directory时出现以下错误:

  

类型' System.Runtime.InteropServices.COMException'的例外情况发生在System.DirectoryServices.AccountManagement.dll中但未在用户代码中处理

     

其他信息:与服务器或共享的多个连接   同一用户使用多个用户名的资源不是   允许。断开与服务器或共享的所有先前连接   资源,然后再试一次。

在下面的代码中,GetAuthorizationGroups()抛出了错误。

代码:

public List<String> GetAllADGroups(String userName)
{

    List<String> groups = new List<String>();

    PrincipalContext ctx = new PrincipalContext(ContextType.Domain, this.Domain, this.LDapUserName, this.LDapPassword);
    UserPrincipal user = UserPrincipal.FindByIdentity(ctx, userName);
    // error on next line
    foreach(Principal group in user.GetAuthorizationGroups().OrderBy(x => x.Name))
    {
        if (group.ContextType == ContextType.Domain && !String.IsNullOrEmpty(group.Name))
        {
            groups.Add(group.Name);
        }
    }
    ctx.Dispose();
    return groups;
}

由于这个项目是在TFS中,我有3个开发人员从他们的开发服务器运行这个代码。我只在其中一台服务器上收到此错误。在抛出此错误的服务器上;当我从IIS运行该网站时,代码工作正常。因此,我认为问题出在以下方面之一:

  1. IIS Express
  2. 服务器配置
  3. VS 2013配置
  4. 感谢任何帮助。

2 个答案:

答案 0 :(得分:0)

经过进一步调查后,我们发现有问题的服务器无法连接到域控制器,这导致了问题。奇怪的是,这只发生在对域控制器的某些调用上。有些电话有效,有些无效。我们得出结论,重建服务器并从头开始更容易。建立新服务器后,我们没有遇到任何问题。

这是一个很好的答案吗?可能不是。在这种情况下服务器病了,我们安乐死了。有时它更容易重新开始,然后花3天时间试图找出问题(我们做了)。

答案 1 :(得分:0)

我在运行GetAuthorizationGroups()时始终遇到相同的异常

  

System.Runtime.InteropServices.COMException:'不允许同一用户使用多个用户名与服务器或共享资源建立多个连接。断开先前所有与服务器或共享资源的连接,然后重试。'

但是GetGroups()可以正常工作。

“无法增强”服务器不是一个选择,所以我使用了How to get all the AD groups for a particular user?中的令牌组解决方案(这不是公认的答案,在撰写本文时,它是排名第三的答案)。