validar usuario servidor query password obtener funcional datos crear conectar con autenticacion active c# asp.net active-directory

usuario - query active directory c#



Almacenamiento en caché de datos de Active Directory (4)

Active Directory es bastante eficiente en el almacenamiento de información y la recuperación no debería ser tan exitosa. Si realmente desea almacenar los nombres, probablemente desee almacenarlos en una estructura de árbol para que pueda ver las relaciones de todas las personas. Según cómo sea el número de personas, también podría extraer toda la información que necesita a diario y luego consultar todas las solicitudes en su copia en caché.

En una de mis aplicaciones, consulto el directorio activo para obtener una lista de todos los usuarios por debajo de un usuario determinado (utilizando la función "Informes directos"). Entonces, básicamente, dado el nombre de la persona, se busca en AD, luego se leen los Informes Directos. Pero luego, para cada informe directo, la herramienta debe verificar los informes directos de los informes directos. O, más abstracto: la herramienta usará una persona como la raíz del árbol y luego caminará por el árbol completo para obtener los nombres de todas las hojas (puede ser varios cientos)

Ahora, mi preocupación es obviamente el rendimiento, ya que esto debe hacerse bastantes veces. Mi idea es almacenarla en caché manualmente (básicamente, simplemente coloque todos los nombres en una cadena larga y almacénela en algún lugar y actualícela una vez al día).

Pero me pregunto si hay una manera más elegante de obtener primero la información y luego almacenarla en caché, posiblemente usando algo en el espacio de nombres System.DirectoryServices?


AD hace ese tipo de almacenamiento en caché para que no te preocupes, a menos que el rendimiento se convierta en un problema. Tengo software que hace este tipo de cosas durante todo el día en una intranet corporativa que requiere miles de visitas por hora y nunca tuvo que ajustar el rendimiento en esta área.


Depende de qué tan actualizada esté la información. Si debe tener los últimos datos en su informe, consultar desde AD es razonable. Y estoy de acuerdo en que AD es bastante robusto, un servidor de AD dedicado típico es realmente muy poco utilizado en las operaciones diarias normales, pero es mejor consultar con su departamento de TI / persona de soporte.

Una alternativa es tener un script diario para volcar los datos AD en un archivo CSV y / o importarlo en una base de datos SQL. (Oracle tiene una función SELECT CONNECT BY que puede crear automáticamente jerarquías de niveles múltiples dentro de un conjunto de resultados. MSSQL puede hacer algo similar con un poco de recursión IIRC).


Para poder controlar las propiedades que desea almacenar en caché, puede llamar a ''RefreshCache ()'' pasando las propiedades que desea conservar:

System.DirectoryServices.DirectoryEntry entry = new System.DirectoryServices.DirectoryEntry(); // Push the property values from AD back to cache. entry.RefreshCache(new string[] {"cn", "www" });