获取PrincipalContext的连接服务器以获取全局编录

时间:2016-08-08 09:32:28

标签: c# .net active-directory

我有一个方法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记录连接的服务器。我有一个只包含虚拟机的测试设置。

我的问题:当我现在断开连接的服务器(禁用网络适配器)时,我没有获得异常并连接到新服务器,但日志消息仍显示原始连接服务器,虽然服务器不再可用。

有没有办法以某种方式刷新连接的服务器属性或从其他地方获取信息?

2 个答案:

答案 0 :(得分:2)

不幸的是,它在启动后永远不会更新,你可以做的唯一解决方法是在每次迭代时重新检查你是否仍然连接

答案 1 :(得分:0)

最简单的解决方案可能是尝试使用.Net的Ping类来ping远程服务器。