Вопрос

Расширение 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() возвращает NULL, как таковой:

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

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

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

Однако звонок:

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

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

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

Заранее спасибо! Джеймс

Это было полезно?

Решение

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top