ho ottenuto il seguente frammento (SomeName
/SomeDomain
contiene i valori reali nel mio codice)ActiveDirectory 0x8000500C errore quando si attraversa proprietà
var entry = new DirectoryEntry("LDAP://CN=SomeName,OU=All Groups,dc=SomeDomain,dc=com");
foreach (object property in entry.Properties)
{
Console.WriteLine(property);
}
Esso stampa OK per i primi 21 proprietà, ma poi falliscono 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
Perché? Come posso impedirlo?
Aggiornamento
Si tratta di un attributo personalizzato che non riesce.
Ho provato a utilizzare entry.RefreshCache()
e entry.RefreshCache(new[]{"theAttributeName"})
prima di elencare le proprietà (che non ha aiutato).
Update2
entry.InvokeGet("theAttributeName")
opere (e senza RefreshCache
).
Qualcuno può spiegare perché?
Update3
Funziona se fornisco il nome di dominio completo alla voce: LDAP://srv00014.ssab.com/CN=SomeName,xxxx
Bounty
Sto cercando una risposta che affronta il seguente:
- Perché
entry.Properties["customAttributeName"]
non riesce con l'eccezione menzionata - Perché
entry.InvokeGet("customAttributeName")
funziona - La causa dell'eccezione
- Come ottenere sia lavorare
La mia prima ipotesi su _why_ sarebbe permessi. In quale contesto stai correndo? –
@ Mr.Disappointment: appena provato con un account che dovrebbe avere privilegi sufficienti. Nessuna differenza :( – jgauffin
Puoi provare a specificare esplicitamente le credenziali di "Dio" tramite il costruttore? Proprio come un controllo di integrità. –