2015-03-05 13 views
5
using (PrincipalContext ctx = new PrincipalContext(ContextType.Domain, Domain, UserName, Password)) 
      { 
       UserPrincipal U = new UserPrincipal(ctx); 
       U.GivenName = strFirstName; 
       U.Surname = strLastName; 
       U.EmailAddress = strEmail; 

       PrincipalSearcher srch = new PrincipalSearcher(U); 

       foreach (var principal in srch.FindAll()) 
       { 
        var p = (UserPrincipal)principal; 
        if (!User.Any(x => x.Email == p.EmailAddress)) 
        { 
         MyUserDataset.UserRow User = User.NewUserRow(); 
         User.FirstName = p.GivenName; 
         User.LastName = p.Surname; 
         User.UserName = p.SamAccountName; 
         User.Email = p.EmailAddress; 
         User.AddUserRow(User); 
        } 
       } 
       User.AcceptChanges(); 
      } 

Tôi đang sử dụng lớp PrincipalContext ở trên để thiết lập kết nối với thư mục đích và chỉ định thông tin đăng nhập để thực hiện thao tác đối với thư mục.Cách đặt thời gian kết nối khi thiết lập ngữ cảnh - PrincipalContext

Có ai biết làm thế nào tôi cũng có thể xác định thời gian kết nối ra trong PrincipalContext Constructor ?, tôi đang chạy vào thời gian kết nối ra vấn đề & tôi đã tự hỏi nếu tôi có thể kiểm soát sau bao lâu có thể kết nối thời gian ra.

Trả lời

1

Vâng, tôi đoán câu trả lời là không may. Tôi đã đào sâu vào mã nguồn của PrincipalContext, nó đã sử dụng DirectoryEntry sử dụng phương thức gốc không an toàn System.DirectoryServices.Interop.UnsafeNativeMethods.ADsOpenObject để mở kết nối LDAP.

Theo blog này: http://blogs.msdn.com/b/dsadsi/archive/2012/06/06/how-to-specify-timeout-for-ldap-bind-in-net.aspx, không có cách nào để định cấu hình thời gian chờ trên ADsOpenObject. Tuy nhiên, nó cũng đề cập rằng nếu sử dụng LdapConnection trực tiếp, sau đó nó có thể thiết lập thời gian chờ. Trong trường hợp đó, bạn có thể không sử dụng được PrincipalContext.

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