目前,我已使用Directory Entry对象将我的Web应用程序与Active Directory连接,并使用硬编码值填充了树视图节点。我
将来,如果有人添加新的组织单位,我将不得不再次手动添加。
我想动态绑定树视图上的所有组织单位,而不是这样做。
请建议我,我该如何实现此功能?
这是我的代码:
PrincipalContext ouContext = new PrincipalContext(ContextType.Domain, "10.27.25.164", "OU=Users,OU=SanFransisco,OU=America,DC=server,DC=local", AD.LDAPUser, AD.LDAPPasswoprd);
我的活动目录arborescence看起来像这样:
Server.Local
---America
...SanFrancisco
...Mexico
.... Users
---India
...Bangalore
.... Users
...Chennai
.... Users
---China
...Shangai
我需要实现一个函数,它必须动态地将Active Directory中的所有值绑定到asp.net treeview控件。
就我而言,我公司希望在日本增加新的OU。我的系统人员将在Active Directory服务器上添加新的OU。但是在我将手动添加新的组织单位之前,我的应用程序树视图不会更新。
他们需要将此场景视为动态场景。当任何管理员在活动目录上添加新OU时,应用程序必须自动在树视图(treeview1)上检索新添加的OU。
我们怎么做?请帮我这样做。
答案 0 :(得分:0)
我宁愿使用DirectoryEntry
对象而不是PrincipalContext
。
在您的情况下,您可以初始化与您的根OU(server.local)对应的DirectoryEntry对象,如this或this。
然后,您可以使用这样的DirectorySearcher请求您的AD: DirectorySearcher searcher = null; SearchResultCollection result = null;
try
{
searcher = new DirectorySearcher(RootEntry, "(objectClass=organizationalunit)", null, SearchScope.Subtree);
result = searcher.FindAll();
list.AddRange(from SearchResult res in result
select Entry = res.GetDirectoryEntry());
}
finally
{
if (searcher != null) searcher.Dispose();
if (result!= null) result.Dispose();
}
获得DirectoryEntry列表后,您可以使用他们的LDAP路径来了解父母和孩子的身份,最后构建您的树视图。
一旦您不再需要这些条目,请小心处理列表中的每个条目。
<强> 强>
提出同样的问题并回答here!