查询跨域用户的全局地址列表(GAL)

时间:2009-08-11 12:37:27

标签: asp.net active-directory exchange-server gal

我需要针对Exchange Server全局地址列表搜索名称中包含特定文本字符串的所有用户。此操作将从ASP.NET应用程序执行。请注意,GAL是必需的(不是Active Directory),因为它包含跨域的用户。这也是客户要求的。

我一直在研究Exchange Web服务和Outlook Web Access方法。但是,我的组织中既没有配置也没有,所以在要求基础设施配置之前,我需要知道哪个选项是正确的。

Exchange Web服务

我希望在Exchange Web服务中使用ResolveNames方法。它的文档说明:

  

首先搜索Active Directory,然后搜索用户的联系人文件夹。

似乎暗示此方法仅返回当前域中的用户。这是对的吗?

Outlook Web Access

我发现的另一个选择是GALFind。这看起来很完美,但this article声明它不受支持。此Technet文章已确认不再提供此内容。

有人可以就这些或任何其他选择提出建议吗?

2 个答案:

答案 0 :(得分:3)

可以通过从林根开始查询来跨域查询。这是我最终使用的代码:

string filter = "(&(objectCategory=person)(objectClass=user)(name=*" + search + "*))";
var rootEntry = new DirectoryEntry("GC:");
foreach (DirectoryEntry entry in rootEntry.Children)
{
    DirectoryEntry forestEntry = entry;
    DirectorySearcher searcher = new DirectorySearcher
        {
            SearchRoot = forestEntry,
            Filter = filter,
            Sort =
                {
                    Direction = SortDirection.Ascending,
                    PropertyName = "cn"
                }
        };
    searcher.PropertiesToLoad.AddRange(ADProperties.Values.ToArray());
    SearchResultCollection results = searcher.FindAll();
    foreach (SearchResult result in results)
    {
        DirectoryEntry foundEntry = result.GetDirectoryEntry();

        // Do something
    }
}

答案 1 :(得分:0)

我不是Exchange专家,但您不能使用Collaboration Data Objects(CDO)执行此操作,尽管它可能不是too swift