2015-03-05 8 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(); 
      } 

Я использую класс PrincipalContext выше, чтобы установить соединение с целевым каталогом и указать учетные данные для выполнения операций с каталогом.Как установить время соединения при установлении контекста - PrincipalContext

Кто-нибудь знает, как я могу указать время соединения в PrincipalContext Constructor ?, Я столкнулся с проблемами времени на подключение & Мне было интересно, могу ли я контролировать, как долго время соединения может истекать.

ответ

1

Ну, я думаю, ответ, к сожалению, нет. Я копаю исходный код PrincipalContext, он использовал DirectoryEntry, который использовал небезопасный собственный метод System.DirectoryServices.Interop.UnsafeNativeMethods.ADsOpenObject, чтобы открыть соединение LDAP.

В соответствии с этим блогом: http://blogs.msdn.com/b/dsadsi/archive/2012/06/06/how-to-specify-timeout-for-ldap-bind-in-net.aspx, нет способа настроить таймаут на ADsOpenObject. Однако он также отметил, что при непосредственном использовании LdapConnection можно установить таймаут. В этом случае вы не сможете пользоваться пользователем PrincipalContext.