8

UserPrincipal öğesini yerleşik özelliklerinden yararlanmak için genişletmek ... FindByIdentity() yöntemini aşırı yüklediğimizde sorun olmak.UserPrincipal'ı genişletme; FindByIdentity() başarısız

Microsoft'un http://msdn.microsoft.com/en-us/library/bb384372%28VS.90%29.aspx'deki örneğinden (parçalar kısmi olarak hariç tutuldu):

[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 örneğinden tam kodu alıp uygulamanıza yapıştırırsam, çalışmaz. Xzx61 çağrısı, null döndürür:

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

Aslında, InetOrgPerson.FindByIdentity() içinden FindByIdentityWithType() çağrısı null döndürür, şöyle ki:

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

Ancak, çağrı:

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

bana istediğim kullanıcı nesnesini veriyor. Bunu kullanamıyorum hariç, çünkü geri dönmem gereken InetOrgPerson nesnesine gönderilemez.

Ne veriyor? Microsoft'un kendi örnek kodunun çalışmasını beklerdim, ama öyle değil, yani doğal olarak bu örneğe dayalı olarak yazmaya çalıştığım kod da çalışmıyor. Bu işi yapan oldu mu?

Şimdiden teşekkürler! James

cevap

12

Aradığın kullanıcının aslında inetOrgPerson sınıfına ait olduğundan emin olun.

+2

Evet, sorun buydu. Sınıfta AD'ye bir sınıfla bağladığım 'DirectoryObjectClass' özniteliğinin farkında değildim. Şimdi anlıyorum ki, bu sınıfın “FindByIdentity” aracılığıyla bir arama yaptığımda, aramamı, AD'mizde yer almayan 'inetOrgPerson' sınıfının AD'si ile sınırlandırıyorum. Benim durumumda 'DirectoryObjectClass' öğesini 'user' olarak ayarlamak istiyorum. Bu aslında oldukça havalı. Teşekkürler! –

+0

Şaşırtıcı, benim için de bir sorun çözüldü – nokturnal