2

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

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

交换网络服务

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

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

似乎暗示此方法只会返回当前域中的用户。它是否正确?

Outlook Web 访问

我发现的另一个选项是 GALFind。这看起来很完美,但这篇文章指出它不受支持在这篇Technet文章中确认它不再可用。

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

4

2 回答 2

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
    }
}
于 2009-09-02T13:36:34.970 回答
0

我不是 Exchange 专家,但您不能使用协作数据对象(CDO) 来执行此操作,尽管它可能不会太快

于 2009-08-12T17:08:17.323 回答