我正在尝试检查域控制器是否准备好接收请求。简单的 ping 是不够的,因为例如重新启动后,网络会在几秒钟内恢复,但域控制器需要几分钟才能准备好并且客户端才能打开会话。
我找到了这个简单的代码:
public bool IsDomainControllerAvailable(string domainControllerName)
{
try
{
DirectoryContext context = new DirectoryContext(DirectoryContextType.Domain, domainControllerName);
DomainController domainController = DomainController.FindOne(context);
return true;
}
catch
{
return false;
}
}
我觉得这个功能很棒,但是我有两个问题。
由于您不关心哪个域控制器响应请求,所以我建议这样:
public bool IsActiveDirectoryAvailable()
{
try
{
string adDomainName = Domain.GetComputerDomain().Name;
return !string.IsNullOrEmpty(adDomainName);
}
catch
{
return false;
}
}
仅当能够连接到 Active Directory (AD) 域并获取域名时,才会返回 true。
至于多久调用一次,这取决于您的要求。我不认为每秒一次会引起问题,但我会测试它。过于频繁地调用它可能会损害性能。如果说它太少,它可能需要很长时间才能告诉您 AD 已准备好。如果您不确定,我建议每 5 或 10 秒一次作为合理的起点。然后您可以尝试不同的值以找到适合您的值。