我对MVC方案有个问题。
堆栈如下:
System.Runtime.InteropServices.COMException (0x80005000):System.DirectoryServices.DirectoryEntry.Bind(Boolean throwIfFail的未知错误(0x80005000),System.DirectoryServices.DirectoryEntry.Bind()的System.DirectoryServices.DirectoryEntry.get_Name() ( PosmanWeb2.Controllers.Helpers.SessionHelpers.GetGroup(SearchResult的结果),PosmanWeb2.Controllers.Helpers.SessionHelpers.GetPerfilAD(SearchResult的结果( PosmanWeb2.Controllers.Helpers.SessionHelpers.GetUser() at PosmanWeb2.Controllers.Helpers.SessionHelpers.ConnectActiveDirectory() )
SessionHelpers上的方法是proyect的一部分,最后一个似乎有问题,代码如下:
private static List<string> GetGroup(SearchResult result)
{
List<string> nombresPerfilAD = new List<string>();
foreach (var i in result.Properties["memberOf"])
{
var group = new DirectoryEntry(@"LDAP://" + i);
nombresPerfilAD.Add(group.Name.Split('=')[1].ToUpper().Trim());
}
return nombresPerfilAD;
} 它主要做的是保存一个列表中的所有配置文件。
特别是一个用户没有这个问题,而另两个用户则有这个问题。
我在其他线程上看到,它可能与权限问题有关,但我不能100%确定该在哪里查找。
发布于 2016-10-13 22:38:19
当前范围内的一个很好的解决方案是不绑定到。result.Properties"memberOf“已经包含组DN。您可以在不使用IADsPathName接口连接到AD的情况下从它获得名称(需要添加对ActiveDs对象的引用)。此外,您还可以使用此接口解除特殊字符。例如,如果您的组名是#Test,它将作为转义返回,就像#Test一样。因此,如果以以下方式重写方法,您将解决问题,提高性能,并处理字符转义:
private static List<string> GetGroup(SearchResult result)
{
List<string> nombresPerfilAD = new List<string>();
IADsPathname pathname = new PathnameClass();
pathname.SetDisplayType(2);
pathname.EscapedMode = 4;
foreach (string groupDn in result.Properties["memberOf"])
{
pathname.Set(groupDn, 4);
nombresPerfilAD.Add(pathname.GetElement(0).ToUpper());
}
return nombresPerfilAD;
}似乎绑定而不是用逗号分隔是为了避免出现这样的情况:当一个组在其名称中包含逗号时。但是,如果组名包含"=“字符怎么办?旧代码不起作用
如果使用.NET 4,则需要将ActiveDs属性中的类型设置为false (在项目引用中)
请注意,memberOf属性不包含嵌套组(userA -> groupA、groupA -> groupB => userA -> groupB)和用户的主组。
https://stackoverflow.com/questions/40030729
复制相似问题