2012-01-03 5 views
7

Vì vậy, tôi có một câu hỏi tôi thành thật không hoàn toàn chắc chắn làm thế nào để yêu cầu. Về cơ bản tôi có một chút mã hoạt động tuyệt vời trên máy cục bộ của mình khi tôi chạy nó. Khi tôi xuất bản nó lên máy chủ web phát triển của chúng tôi, nó không thành công. Tôi không chắc chắn nếu nó là một vấn đề thiết lập IIS, vấn đề web.config hoặc một vấn đề mã hóa.C# Active Directory PrincipalContext/UserPrincipal.IsMemberOf lỗi

Dưới đây là đoạn mã

bool isMember = false; 

    PrincipalContext ADDomain = new PrincipalContext(ContextType.Domain); 
    UserPrincipal user = UserPrincipal.FindByIdentity(ADDomain, userID); 

    if (user.IsMemberOf(ADDomain, IdentityType.Name, groupName.Trim())) 
    { 
     isMember = true; 
    } 

    return isMember; 

Nơi tôi vượt qua trong một tên người dùng và một nhóm và nó nói với tôi nếu người dùng đó là một thành viên trong nhóm đó. Không vấn đề gì. Hoạt động tốt trên máy của tôi. Tôi đi công bố đoạn mã đó để máy chủ web và nó không thành công khi nó chạm dòng

UserPrincipal user = UserPrincipal.FindByIdentity(ADDomain, userID); 

nó throws lỗi này:

[DirectoryServicesCOMException (0x80072020): An operations error occurred.]
System.DirectoryServices.DirectoryEntry.Bind(Boolean throwIfFail) +788
System.DirectoryServices.DirectoryEntry.Bind() +44
System.DirectoryServices.DirectoryEntry.get_AdsObject() +42
System.DirectoryServices.PropertyValueCollection.PopulateList() +29
System.DirectoryServices.PropertyValueCollection..ctor(DirectoryEntry entry, String propertyName) +63
System.DirectoryServices.PropertyCollection.get_Item(String propertyName) +163 System.DirectoryServices.AccountManagement.PrincipalContext.DoLDAPDirectoryInitNoContainer() +521217
System.DirectoryServices.AccountManagement.PrincipalContext.DoDomainInit() +51
System.DirectoryServices.AccountManagement.PrincipalContext.Initialize() +141
System.DirectoryServices.AccountManagement.PrincipalContext.get_QueryCtx() +42
System.DirectoryServices.AccountManagement.Principal.FindByIdentityWithTypeHelper(PrincipalContext context, Type principalType, Nullable`1 identityType, String identityValue, DateTime refDate) +29
System.DirectoryServices.AccountManagement.UserPrincipal.FindByIdentity(PrincipalContext context, String identityValue) +95
Cosmic.Web.Login.btnSubmit_Click(Object sender, EventArgs e) in C:\cosmic\Cosmic.Web\Login.aspx.cs:79
System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument) +154
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +3691

Bất kỳ ý tưởng nơi này có thể được không?

Trả lời

17

Dự đoán đầu tiên của tôi là: tài khoản người dùng mà bạn đang chạy mã này không có các quyền cần thiết để truy vấn Thư mục Họat động.

Để sửa lỗi này, về cơ bản bạn cần thay đổi constructor của bạn từ này:

PrincipalContext ADDomain = new PrincipalContext(ContextType.Domain); 

(thiết lập một kết nối đến AD với, thông tin mặc định hiện tại mã này được chạy dưới)

để này:

PrincipalContext ADDomain = 
    new PrincipalContext(ContextType.Domain, "DOMAIN", useraccount, password); 

và cung cấp tên người dùng và mật khẩu cho tài khoản người dùng mà bạn biết có đủ đặc quyền t o truy vấn Active Directory.

+1

Bạn biết đó là gì. Máy chủ web không có thông tin xác thực phù hợp để nhấn Active Directory. Đặt một số thông tin trong đó và nó hoạt động khá hơn một chút. Cảm ơn! – Seril