我的团队在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运行该网站时,代码工作正常。因此,我认为问题出在以下方面之一:
感谢任何帮助。
答案 0 :(得分:0)
经过进一步调查后,我们发现有问题的服务器无法连接到域控制器,这导致了问题。奇怪的是,这只发生在对域控制器的某些调用上。有些电话有效,有些无效。我们得出结论,重建服务器并从头开始更容易。建立新服务器后,我们没有遇到任何问题。
这是一个很好的答案吗?可能不是。在这种情况下服务器病了,我们安乐死了。有时它更容易重新开始,然后花3天时间试图找出问题(我们做了)。
答案 1 :(得分:0)
我在运行GetAuthorizationGroups()
时始终遇到相同的异常
System.Runtime.InteropServices.COMException:'不允许同一用户使用多个用户名与服务器或共享资源建立多个连接。断开先前所有与服务器或共享资源的连接,然后重试。'
但是GetGroups()
可以正常工作。
“无法增强”服务器不是一个选择,所以我使用了How to get all the AD groups for a particular user?中的令牌组解决方案(这不是公认的答案,在撰写本文时,它是排名第三的答案)。>