es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

DirectoryEntry.Exist en C# tarda más de 10 segundos cuando el usuario AD/NT no está presente.

El problema también puede ser activado con la siguiente aplicación simple:

“`c#
Stopwatch watch = new Stopwatch();
string[] userNames = {"JunkName", "DummyName"};

foreach (var name in userNames)
{
watch.Reset();
watch.Start();

<pre><code>if (DirectoryEntry.Exists("WinNT://" + Environment.MachineName + "/" + name))
{
Console.WriteLine($"user {name} encontrado en " + watch.ElapsedMilliseconds + "ms");
}
else
{
Console.WriteLine($"user {name} no encontrado en " + watch.ElapsedMilliseconds + "ms");
}
</code></pre>

}

No hay una causa raíz adecuada para decir si es un problema de API de Microsoft o algo más.

Sin embargo, la mayoría de los resultados de búsqueda mencionan que si buscas un usuario que no existe, en lugar de devolver falso, el método <code>DirectoryEntry.Exists</code> lanzará una excepción.

Pero en nuestra aplicación de muestra no está lanzando ninguna excepción.

También traté con las siguientes sugerencias para verificar cuánto tiempo de ejecución lleva este código de muestra y encontré que también llevarán más de 11 segundos la primera vez.

Ejemplo 1:

“`c#
using (PrincipalContext pc = new PrincipalContext(ContextType.Machine))
{
UserPrincipal up = UserPrincipal.FindByIdentity(pc,
IdentityType.SamAccountName, name);

UserExists = (up != null);

}


Ejemplo 2: ```c# DirectoryEntry dirEntryLocalMachine = new DirectoryEntry("WinNT://" + Environment.MachineName + "/",computer); bool UserExists = dirEntryLocalMachine.Children.Find(userIdentity, "user") != null;

Es solo una sospecha de alto nivel que las actualizaciones del sistema operativo podrían haber causado el problema, tal vez mi suposición sea incorrecta.

Gracias de antemano.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Como especialista en informática especializado en c#, .net, y DirectoryEntry, el fragmento de código proporcionado muestra un bucle que comprueba si un usuario existe en el dominio Windows NT mediante DirectoryEntry.Exists. El problema en cuestión es que algunos usuarios pueden tardar más de 11 segundos en encontrarse, lo que es más tiempo del esperado.

    Aunque no está claro cuál es la causa principal de este problema, algunos resultados de búsqueda sugieren que, en lugar de devolver false, DirectoryEntry.Exists puede generar una excepción al buscar un usuario que no existe. Sin embargo, en el código proporcionado, no se está generando ninguna excepción.

    Se proporcionan dos fragmentos de código adicionales, utilizando PrincipalContext y DirectoryEntry.Children.Find, pero también tardan más de 11 segundos en ejecutarse en el primer intento.

    La causa de este retraso es actualmente desconocida, y se sospecha que las actualizaciones recientes del sistema operativo pueden haber causado el problema. Se necesitan investigaciones adicionales para determinar la causa raíz y encontrar una solución.

Comments are closed.