【问题标题】:Get the connected server of a PrincipalContext for global catalog获取全局目录的 PrincipalContext 的连接服务器
【发布时间】:2016-08-08 09:32:28
【问题描述】:

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

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

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

【问题讨论】:

  • 显然你必须实现自己的 ChangeTracker 看看here 看看这是否有帮助
  • 您可以检查一下您的网络是否已连接?像这样:System.Net.NetworkInformation.NetworkInterface.GetIsNetworkAvailable()
  • @lok​​usking 哈哈,事实上我在更改通知方面做了很多工作,它们确实是解决同步对象的潜在问题的解决方案。但这次我只想得到新的ConnectedServer
  • @ralf.w。问题不在于网络断开。当我断开运行我的代码的机器时,这意味着我切断了所有 GC,我得到了一个异常。但是如果我只断开当前连接的 GC,AD 和 PrincipalContext 会切换到另一个 GC,我想获取使用哪个 GC 的信息。

标签: c# .net active-directory


【解决方案1】:

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

【讨论】:

  • 我已连接,否则会出现异常。我只想知道我连接到哪台服务器。但是看到这个问题的大量答案 ;-) 它看起来真的是不可能的
【解决方案2】:

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

【讨论】:

  • 抱歉,这并不能解决我的问题:当连接到 GC 并且我自动连接到的服务器丢失时,我连接到了另一台服务器。我想知道那台服务器的地址,但我只得到第一台服务器的地址。抱歉,如果您误解了我的问题。更新了问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-08-05
  • 2012-06-01
  • 1970-01-01
  • 2010-12-19
  • 2019-05-07
  • 1970-01-01
  • 2011-11-26
相关资源
最近更新 更多