Pergunta

Eu preciso procurar todos os usuários contendo uma cadeia de texto certo em seu nome contra a lista de endereços do Exchange Server global. Esta operação será realizada a partir de uma aplicação ASP.NET. Note que o GAL é necessário (não Active Directory), já que contém os usuários em vários domínios. É também o que o cliente solicitou.

Eu estive olhando para o Exchange Web Services e métodos Outlook Web Access. No entanto, nem pode ser configurado na minha organização, de modo que eu preciso saber qual opção é a correta antes de pedir a infra-estrutura para configurá-lo.

Exchange Web Services

Eu esperava usar o href="http://msdn.microsoft.com/en-us/library/aa563518.aspx" rel="nofollow noreferrer"> método no Exchange Web Services . A documentação para ele afirma que:

Active Directory é procurado em primeiro lugar, e, em seguida, pasta de contatos do usuário é pesquisada.

Parece implicar que este método só retornará usuários do domínio atual. É este correto?

Outlook Web Access

A outra opção que eu encontrei foi GALFind. Isso parece perfeito, mas este artigo afirmou que é não suportado . Confirma-se como nenhum disponível já neste artigo Technet .

Alguém por favor pode dar conselhos sobre estes ou quaisquer outras opções?

Foi útil?

Solução

É possível consultar vários domínios, iniciando a consulta a partir da raiz da floresta. Aqui está o código que acabou usando:

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
    }
}

Outras dicas

Não sou especialista Exchange, mas você não pode fazer isso usando Collaboration Data Objects (CDO), embora possa não ser muito rápida .

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top