DirectoryEntry 仅调用域下的 dns 配置的 dc 服务器
Posted
技术标签:
【中文标题】DirectoryEntry 仅调用域下的 dns 配置的 dc 服务器【英文标题】:DirectoryEntry call to only dns configured dc servers under a domain 【发布时间】:2022-01-11 17:22:57 【问题描述】:我们正在使用 DirectoryEntry 方法通过传递域名来查询 Active Directory。 在这个域下,有40个DC,其中20个配置了DNS,其余的都是非DNS配置的,维护不好也不可靠(连接到这些非DNS配置的DC通常会超时或线程被中止)。
现在,在使用 directoryEntry 方法进行 AD 调用时,有没有办法只查询配置了 DNS 的 DC?
目前,代码选择非 DNS 配置的 DC。
我知道根据地理位置和其他因素,在域中选择 DC 是一项域服务器任务。有什么方法可以修改代码以指示 DirectoryEntry 在我们传递域名时仅选择 DNS 配置的 DC。
c# .net 中的示例代码:
DirectoryEntry obEntry = new DirectoryEntry(@"LDAP://" + DomainName + "/<SID=" + new SecurityIdentifier(groupSid, 0).Value + ">", serviceAccountUser, serviceAccountPassword);
if (obEntry.Guid != null)
string distinguishedNameObtained = Convert.ToString(obEntry.Properties["distinguishedName"].Value);
【问题讨论】:
【参考方案1】:您不能告诉DirectoryEntry
选择 DC 的子集,但您可以告诉它使用一个特定的 DC。在您的代码中,您可以将 DomainName
变量设置为 DC 的名称:
var DomainName = "dc1.example.com";
这是最简单的方法,但现在您已经硬编码了一个 DC,如果该 DC 出现故障,您必须更改代码,这并不理想。
如果您想从可用的 DC 中进行选择,您可以尝试使用 Domain.GetCurrentDomain()
或 Domain.GetDomain()
(如果您运行它的计算机不在您要连接的同一域上),然后检查DomainControllers
收藏。我不知道您所说的没有为 DNS 配置 DC 是什么意思,所以我不确定这是否可以从 DomainController
类中确定。看看documentation for DomainController
,看看是否有什么可以使用的。如果您想从特定站点选择 DC,则有一个 SiteName
属性。
如果您能够做到这一点,那么您可以在 LDAP 字符串中使用 DomainController
的 Name
属性。
【讨论】:
以上是关于DirectoryEntry 仅调用域下的 dns 配置的 dc 服务器的主要内容,如果未能解决你的问题,请参考以下文章
thinkphp cookie 只在本页有效,相同域下的其他页面就调用无效了,我也加了时间