检查 Active Directory 是否已准备就绪

问题描述 投票:0回答:1

我正在尝试检查域控制器是否准备好接收请求。简单的 ping 是不够的,因为例如重新启动后,网络会在几秒钟内恢复,但域控制器需要几分钟才能准备好并且客户端才能打开会话。

我找到了这个简单的代码:

public bool IsDomainControllerAvailable(string domainControllerName)
{
    try
    {
        DirectoryContext context = new DirectoryContext(DirectoryContextType.Domain, domainControllerName);

        DomainController domainController = DomainController.FindOne(context);

        return true;
    }
    catch
    {
        return false;
    }
}

我觉得这个功能很棒,但是我有两个问题。

  • 这是确保域控制器准备好接收请求的正确方法吗?
  • 每秒重复此检查以进行持续监控是否有问题?
c# dns controller active-directory
1个回答
0
投票

由于您不关心哪个域控制器响应请求,所以我建议这样:

public bool IsActiveDirectoryAvailable()
{
    try
    {
        string adDomainName = Domain.GetComputerDomain().Name;
        return !string.IsNullOrEmpty(adDomainName);
    }
    catch
    {
        return false;
    }
}

仅当能够连接到 Active Directory (AD) 域并获取域名时,才会返回 true。

至于多久调用一次,这取决于您的要求。我不认为每秒一次会引起问题,但我会测试它。过于频繁地调用它可能会损害性能。如果说它太少,它可能需要很长时间才能告诉您 AD 已准备好。如果您不确定,我建议每 5 或 10 秒一次作为合理的起点。然后您可以尝试不同的值以找到适合您的值。

© www.soinside.com 2019 - 2024. All rights reserved.