Получить подключенный сервер PrincipalContext для глобального каталога

У меня есть метод CreateContextForGlobalCatalog, который возвращает PrincipalServer, который подключается к глобальному каталогу:

PrincipalContext = new PrincipalContext(ContextType.Domain,
                                        "forest.name:3268", 
                                        "dc=forest,dc=name", 
                                        ContextOptions.Negotiate, 
                                        userName, password);

Примечание. Это уменьшенная версия метода, обычно имя и контейнер являются параметрами.

В этом контексте я перебираю объекты из базы данных, чтобы получить информацию из глобального каталога в ActiveDirectory:

using (PrincipalContext principalContext = CreateContextForGlobalCatalog())
{
    foreach (ADAccount adAccount in accounts){
       Log.Debug("Connected server: " + principalContext.ConnectedServer);

    // get some information from AD here ...
    }
}

Строка Log.Debug регистрирует подключенный сервер из PrincipalContext. У меня есть тестовая установка, содержащая только виртуальные машины.

Моя проблема: Когда я сейчас отключу этот подключенный сервер (отключите сетевой адаптер), я не получаю исключение и не подключаюсь к новому серверу, но в сообщениях журнала по-прежнему отображается исходный подключенный сервер, хотя сервер больше не доступен.

Есть ли способ как-то обновить свойство подключенного сервера или получить информацию из другого места?

Ответ 1

К сожалению, он никогда не будет обновлен после инициирования, единственным обходным решением, которое вы можете сделать, является повторная проверка с каждой итерацией, если вы все еще подключены или нет.

Ответ 2

Наиболее простым решением может быть попытка выполнить ping удаленный сервер, используя класс .Net Ping.