8

Mở rộng UserPrincipal để tận dụng lợi thế của các thuộc tính tích hợp của nó ... gặp phải sự cố khi chúng tôi quá tải phương thức FindByIdentity().Mở rộng UserPrincipal; FindByIdentity() không thành công

Từ ví dụ của Microsoft tại http://msdn.microsoft.com/en-us/library/bb384372%28VS.90%29.aspx (phần loại trừ cho ngắn gọn):

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

Nhược bằng tôi lấy mã chính xác từ ví dụ MSDN và dán nó vào ứng dụng của tôi, nó không hoạt động. Các cuộc gọi đến InetOrgPerson.FindByIdentity() trả về NULL, như vậy:

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

Trong thực tế, từ bên trong InetOrgPerson.FindByIdentity(), cuộc gọi đến FindByIdentityWithType() trả về NULL, như vậy:

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

Tuy nhiên, các cuộc gọi:

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

cung cấp cho tôi đối tượng người dùng mà tôi muốn. Ngoại trừ tôi không thể sử dụng nó, bởi vì nó không thể được đúc vào đối tượng InetOrgPerson tôi cần phải trả lại.

Điều gì mang lại? Tôi mong đợi mã ví dụ của Microsoft để làm việc, nhưng nó không, vì vậy tự nhiên mã tôi đang cố gắng để viết dựa trên ví dụ này không làm việc, một trong hai. Có ai đã thực hiện công việc này không?

Cảm ơn trước! James

Trả lời

12

Đảm bảo rằng người dùng bạn đang tìm kiếm thực sự thuộc về lớp inetOrgPerson.

+2

Đúng, đó là vấn đề. Tôi đã không nhận ra rằng thuộc tính 'DirectoryObjectClass' tôi đặt gắn lớp vào một lớp trong AD. Vì vậy, bây giờ tôi hiểu rằng khi tôi thực hiện tìm kiếm thông qua 'FindByIdentity' của lớp này, tôi đang giới hạn tìm kiếm của mình cho các đối tượng trong lớp AD 'inetOrgPerson', trong đó không có trong AD của chúng ta. Trong trường hợp của tôi, tôi muốn đặt 'DirectoryObjectClass' thành 'user'. Điều đó thực sự khá thú vị. Cảm ơn! –

+0

Tuyệt vời, đã khắc phục sự cố cho tôi – nokturnal

Các vấn đề liên quan