me dieron el siguiente fragmento (SomeName
/SomeDomain
contiene valores reales en mi código)0x8000500C error ActiveDirectory cuando se atraviesa propiedades
var entry = new DirectoryEntry("LDAP://CN=SomeName,OU=All Groups,dc=SomeDomain,dc=com");
foreach (object property in entry.Properties)
{
Console.WriteLine(property);
}
Imprime bien para los primeros 21 propiedades, pero luego fracasan con:
COMException {"Unknown error (0x8000500c)"}
at System.DirectoryServices.PropertyValueCollection.PopulateList()
at System.DirectoryServices.PropertyValueCollection..ctor(DirectoryEntry entry, String propertyName)
at System.DirectoryServices.PropertyCollection.PropertyEnumerator.get_Entry()
at System.DirectoryServices.PropertyCollection.PropertyEnumerator.get_Current()
at ActiveDirectory.Tests.IntegrationTests.ObjectFactoryTests.TestMethod1() in MyTests.cs:line 22
¿Por qué? ¿Cómo puedo prevenirlo?
actualización
Es un atributo personalizado que falla.
He intentado usar entry.RefreshCache()
y entry.RefreshCache(new[]{"theAttributeName"})
antes de enumerar las propiedades (que no me ayudaron).
Update2
entry.InvokeGet("theAttributeName")
obras (y sin RefreshCache
).
¿Alguien puede explicar por qué?
Update3
Funciona si yo proporciono el nombre completo de la máquina: LDAP://srv00014.ssab.com/CN=SomeName,xxxx
Bounty
estoy buscando una respuesta que se ocupa de lo siguiente:
- Por qué
entry.Properties["customAttributeName"]
falla con la excepción mencionada - Por qué funciona
entry.InvokeGet("customAttributeName")
- La causa de la excepción
- Como llegar tanto trabajo
Mi primera conjetura en _why_ serían los permisos. ¿En qué contexto estás corriendo? –
@ Mr.Disappointment: Acabo de probar con una cuenta que debería tener suficientes privilegios. No hay diferencia :( – jgauffin
¿Puedes intentar especificar las credenciales de 'Dios' explícitamente a través del constructor? Solo como una comprobación de cordura. –