8
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 构造函数中指定连接超时?,我遇到了连接超时问题,我想知道我是否可以控制连接超时多长时间。

4

1 回答 1

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。

于 2016-01-21T01:52:49.607 回答