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

używam klasy PrincipalContext powyżej, aby nawiązać połączenie z katalogu docelowego i określ poświadczenia do wykonywania operacji na katalogu.Jak ustawić czas połączenia się przy ustalaniu kontekstu - PrincipalContext

Czy ktoś wie, w jaki sposób mogę również określić czas połączenia w konstruktorze PrincipalContext ?, mam problemy z przekroczeniem czasu połączenia & Zastanawiam się, czy mogę kontrolować po jak długo połączenie może upłynąć.

Odpowiedz

1

Cóż, myślę, że odpowiedź niestety nie jest. Mam dig do kodu źródłowego PrincipalContext, użył DirectoryEntry, który użył niebezpieczną natywną metodę System.DirectoryServices.Interop.UnsafeNativeMethods.ADsOpenObject, aby otworzyć połączenie LDAP.

Zgodnie z tym blogiem: http://blogs.msdn.com/b/dsadsi/archive/2012/06/06/how-to-specify-timeout-for-ldap-bind-in-net.aspx, nie ma możliwości skonfigurowania limitu czasu na obiekcie ADsOpenObject. Wspomniano jednak również, że w przypadku bezpośredniego używania LdapConnection można ustawić limit czasu. W takim przypadku możesz nie być w stanie korzystać z PrincipalContext.

Powiązane problemy