Запрос глобального списка адресов (GAL) для пользователей из разных доменов - PullRequest
2 голосов
/ 11 августа 2009

Мне нужно выполнить поиск всех пользователей, содержащих определенную текстовую строку в своем имени, в глобальном списке адресов Exchange Server. Эта операция будет выполняться из приложения ASP.NET. Обратите внимание, что требуется GAL (не Active Directory), поскольку он содержит пользователей из разных доменов. Это также то, что просил клиент.

Я изучал методы веб-служб Exchange и Outlook Web Access. Однако ни один из них не может быть настроен в моей организации, поэтому мне нужно знать, какой вариант является правильным, прежде чем просить инфраструктуру настроить его.

Веб-службы Exchange

Я надеялся использовать метод ResolveNames в веб-службах Exchange. Документация для этого заявляет, что:

Сначала выполняется поиск в Active Directory, а затем в папке контактов пользователя.

Похоже, это означает, что этот метод будет возвращать пользователей только из текущего домена. Это правильно?

Outlook Web Access

Другой вариант, который я нашел, был GALFind. Это выглядит идеально, но в этой статье указано, что не поддерживается . В этой статье Technet она больше не доступна.

Может кто-нибудь дать совет по этим или другим вариантам?

Ответы [ 2 ]

3 голосов
/ 02 сентября 2009

Можно выполнять запросы между доменами, запустив запрос из корня леса. Вот код, который я использовал в итоге:

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
    }
}
0 голосов
/ 12 августа 2009

Я не эксперт по Exchange, но вы не можете сделать это, используя Объекты данных совместной работы (CDO), хотя это может быть не слишком быстро .

...