Pergunta

Em um dos meus aplicativos, estou consultando o Active Directory para obter uma lista de todos os usuários abaixo de um determinado usuário (usando o recurso "Direct Reports").Então basicamente, dado o nome da pessoa, ele é pesquisado no AD, depois são lidos os Direct Reports.Mas então, para cada subordinado direto, a ferramenta precisa verificar os subordinados diretos dos subordinados diretos.Ou, mais abstrato:A ferramenta usará uma pessoa como raiz da árvore e depois percorrerá a árvore completa para obter os nomes de todas as folhas (podem ser várias centenas)

Agora, minha preocupação é obviamente o desempenho, pois isso precisa ser feito algumas vezes.Minha ideia é armazenar isso em cache manualmente (essencialmente, basta colocar todos os nomes em uma string longa, armazená-los em algum lugar e atualizá-los uma vez por dia).

Mas eu só me pergunto se existe uma maneira mais elegante de primeiro obter as informações e depois armazená-las em cache, possivelmente usando algo no namespace System.DirectoryServices.

Foi útil?

Solução

Para assumir o controle sobre as propriedades que você deseja armazenar em cache, você pode chamar 'RefreshCache()' passando as propriedades que deseja manter:

System.DirectoryServices.DirectoryEntry entry = new System.DirectoryServices.DirectoryEntry();               

// Push the property values from AD back to cache.

entry.RefreshCache(new string[] {"cn", "www" });

Outras dicas

O Active Directory é bastante eficiente no armazenamento de informações e a recuperação não deve prejudicar tanto o desempenho.Se você realmente pretende armazenar os nomes, provavelmente desejará armazená-los em algum tipo de estrutura de árvore, para poder ver os relacionamentos de todas as pessoas.Dependendo do número de pessoas, você também pode obter todas as informações necessárias diariamente e, em seguida, consultar todas as solicitações em sua cópia em cache.

O AD faz esse tipo de cache para você, então não se preocupe com isso, a menos que o desempenho se torne um problema.Tenho software fazendo esse tipo de coisa o dia todo em uma intranet corporativa que recebe milhares de acessos por hora e nunca precisei ajustar o desempenho nessa área.

Depende de quão atualizada você deseja que as informações estejam.Se você deve ter os dados mais recentes do seu relatório e consultar diretamente do AD é razoável.E eu concordo que o AD é bastante robusto, um servidor AD dedicado típico é, na verdade, pouco utilizado nas operações normais do dia a dia mas é melhor verificar com seu departamento de TI/pessoa de suporte.

Uma alternativa é ter um script diário para despejar os dados do AD em um arquivo CSV e/ou importá-los para um banco de dados SQL.(A Oracle possui um recurso SELECT CONNECT BY que pode criar automaticamente hierarquias de vários níveis dentro de um conjunto de resultados.MSSQL pode fazer algo semelhante com um pouco de recursão (IIRC).

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