检查 Active Directory 域控制器是否已启动并运行的 C# 方法

Mik*_*uno 5 c# active-directory

我想增强我正在编写的 C# 程序,以便在其中一个或多个离线时它可以利用全局目录 DC 列表中的任何一个。我想编写一个方法,根据 ADDS 是否在目标服务器上运行(而不仅仅是服务器是否可 ping 通)来返回 bool 值:

public bool DC_is_Alive(string DomainControllerFQDN) 
{
...
}
Run Code Online (Sandbox Code Playgroud)

old*_*ets 8

您可以使用以下方法之一:

I. 在服务器上创建RootDSE分区的DirectoryEntry,捕获COMException并检查错误代码

using (var entry = new DirectoryEntry("LDAP://serverFqdn/RootDSE"))
{
    entry.RefreshCache();
}
Run Code Online (Sandbox Code Playgroud)

二. 创建到服务器的LdapConnection,调用Bind方法,捕获LdapException并检查错误代码

using (var connection = new LdapConnection...)
{
    connection.Bind();
}
Run Code Online (Sandbox Code Playgroud)

三.调用 DomainController.GetDomainController 方法,并捕获 ActiveDirectoryObjectNotFoundException

var dc = DomainController.GetDomainController(new DirectoryContext...);
Run Code Online (Sandbox Code Playgroud)

PS 根据我的经验,DomainController.GetDomainController 可能会挂起,因此整个程序停止响应(这种情况发生在 1000 个 AD 环境中的 1 个)。创建了一个方法版本,该方法异步调用 DomainController.GetDomainController 并在挂起时抛出 TimeoutException