8

Расширение UserPrincipal, чтобы воспользоваться его встроенными свойствами ... при запуске проблемы при перегрузке метода FindByIdentity().Расширение UserPrincipal; FindByIdentity() не удается

Из примера Microsoft по адресу http://msdn.microsoft.com/en-us/library/bb384372%28VS.90%29.aspx (части исключены для краткости):

[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); 
    } 
} 

Если взять точный код из примера MSDN и вставить его в мое приложение, он не работает. Вызов InetOrgPerson.FindByIdentity() возвращает нулевое значение, как таковой:

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

В самом деле, внутри InetOrgPerson.FindByIdentity(), вызов FindByIdentityWithType() возвращает нулевое значение, как таковой:

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

Однако призыв:

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

дает мне объект пользователя, который я хочу. Кроме того, я не могу использовать это, потому что он не может быть перенесен в объект InetOrgPerson, который мне нужно вернуть.

Что дает? Я бы ожидал, что собственный пример кода Microsoft будет работать, но это не так, поэтому код, который я пытаюсь написать на примере, тоже не работает. Кто-нибудь сделал эту работу?

Заранее благодарен! James

ответ

12

Убедитесь, что пользователь, которого вы ищите, действительно относится к классу inetOrgPerson.

+2

Да, это была проблема. Я не понял, что атрибут «DirectoryObjectClass», который я установил, привязал класс к классу в AD. Итак, теперь я понимаю, что когда я выполняю поиск в этом классе 'FindByIdentity', я ограничиваю свой поиск объектами в AD класса 'inetOrgPerson', которых нет в нашем AD. В моем случае я хочу, чтобы «DirectoryObjectClass» был «пользователем». Это на самом деле довольно круто. Благодаря! –

+0

Удивительный, исправленный вопрос для меня тоже – nokturnal

Смежные вопросы