【发布时间】:2017-07-28 19:56:43
【问题描述】:
在调用 .NET 的 System.DirectoryServices.DirectoryEntry.RefreshCache() 时,我们发现有明显的延迟(11 秒或更长时间,具体取决于环境和负载)。此延迟是由于通过 DNS 和 WINS 查找 DC 名称的一般尝试。有谁知道如何指导 .NET 使用提供的服务器名称?下面的部分提供了详细信息。
DNS 查询: .NET 使用查询中的服务器名称对服务进行一系列 DNS 查询。当然,这个查询不起作用。 .NET 然后故障转移到 WINS/NetBIOS 以查找服务器名称。这不起作用,因此 .NET 故障转移到使用服务器名称查询 DNS 系统以获取 A 记录。最后一步有效。其中一些步骤存在重大延迟。
频率: 如果测试迭代间隔足够好,则此问题会在每次测试迭代开始时出现。在更密集的测试负载下,问题可能会跳过一两次测试迭代。
每次测试迭代中的后续连接尝试通常表现良好(我不知道为什么每次迭代都会建立多个连接 - 另一天的问题)。
技术: 托管代码的客户端计算机是与 Active Directory 服务器不同的域的成员。域之间已建立信任。
代码:
AuthenticationTypes authTypes = AuthenticationTypes.SecureSocketsLayer;
String connect = "LDAP://servername.otherdomain:636/DC=otherdomain"
DirectoryEntry de = new DirectoryEntry(connect, serviceAccount, PWD, authTypes)
de.RefreshCache(); // The delay is specific to this line.
// And so on...
dtree = de.Children;
policy = new DomainPolicy(de);
...
谢谢
【问题讨论】:
-
DNS 查找似乎不是问题。将 DC 添加到服务器的主机文件中,性能没有变化。
-
看起来 .NET 使用查询中的服务器名称对服务进行了一系列 DNS 查找。当然,此查询不起作用,因此 .NET 故障转移到 WINS/NetBIOS 以查找服务器名称。这不起作用,因此 .NET 故障转移到使用服务器名称查询 DNS 系统以获取 A 记录。最后一步有效。
标签: .net performance delay directoryentry