8

Rozszerzenie UserPrincipal, aby skorzystać z jego wbudowanych właściwości ... uruchamia się problem, gdy przeciążamy metodę FindByIdentity().Rozszerzenie UserPrincipal; FindByIdentity() kończy się niepowodzeniem.

Od przykład Microsoft w http://msdn.microsoft.com/en-us/library/bb384372%28VS.90%29.aspx (części wyłączonych dla zwięzłość):

[DirectoryRdnPrefix("CN")] 
[DirectoryObjectClass("inetOrgPerson")] 
public class InetOrgPerson : UserPrincipal { 

    // Implement the overloaded search method FindByIdentity 
    public static new InetOrgPerson FindByIdentity(PrincipalContext context, 
                string identityValue) { 
     return (InetOrgPerson)FindByIdentityWithType(context, 
                typeof(InetOrgPerson), 
                identityValue); 
    } 

    // Implement the overloaded search method FindByIdentity 
    public static new InetOrgPerson FindByIdentity(PrincipalContext context, 
                IdentityType identityType, 
                string identityValue) { 
     return (InetOrgPerson)FindByIdentityWithType(context, 
                typeof(InetOrgPerson), 
                identityType, 
                identityValue); 
    } 
} 

Jeśli wezmę dokładnie kod z przykładu MSDN i wkleić go do mojej aplikacji, to nie działa. Wezwanie do InetOrgPerson.FindByIdentity() zwraca null, jako takich:

if (null == InetOrgPerson.FindByIdentity(principalContext, UserName)) { 
    throw new Exception("bah"); 
} 

W rzeczywistości, od wewnątrz InetOrgPerson.FindByIdentity(), wezwanie do FindByIdentityWithType() zwraca null, jako takich:

if (null == FindByIdentityWithType(context, typeof(InetOrgPerson), identityType, identityValue) { 
    throw new Exception("bah"); 
} 

Jednak wezwanie:

FindByIdentityWithType(context, typeof(UserPrincipal), identityType, identityValue) 

daje mi obiekt użytkownika, który chcę. Z wyjątkiem tego, że nie mogę tego użyć, ponieważ nie można go przenieść do obiektu InetOrgPerson, który muszę zwrócić.

Co daje? Spodziewałbym się przykładowego kodu Microsoftu, ale tak nie jest, więc oczywiście kod, który próbuję napisać na podstawie tego przykładu, też nie działa. Czy ktokolwiek to zrobił?

Z góry dziękuję! James

Odpowiedz

12

Upewnij się, że użytkownik, którego szukasz, faktycznie należy do klasy inetOrgPerson.

+2

Tak, to był problem. Nie zdawałem sobie sprawy, że ustawiony przeze mnie atrybut "DirectoryObjectClass" związał klasę z klasą w AD. Więc teraz rozumiem, że kiedy przeszukuję ten "FindByIdentity" tej klasy, ograniczam moje poszukiwania do obiektów w AD klasy "inetOrgPerson", których nie ma w naszym AD. W moim przypadku chcę ustawić 'DirectoryObjectClass' na 'user'. To całkiem fajne. Dzięki! –

+0

Niesamowite, naprawiono też problem dla mnie – nokturnal

Powiązane problemy