在(虚拟)服务器上查找LDAP域名

时间:2015-03-30 08:45:02

标签: c# active-directory ldap logonserver

我的某些进程需要当前LDAP提供程序的域名(基本上,用于同步AD中的用户信息)。

该过程提示用户输入源LDAP服务器,但提供默认值的信息(因此可以使用默认值)。

以下代码适用于用户工作站,但在服务器上失败:

var uri = "LDAP://" + Environment.GetEnvironmentVariable("LOGONSERVER");

我也尝试了"ldap://rootDSE",但抛出了NotSupportedException

  

提供商不支持搜索,无法搜索LDAP:// rootDSE。

所以,我有几个问题:

  1. 为什么LOGONSERVER envvar在服务器上不可用?
  2. 我该怎么做?
  3. 当我接受它时,RootDSE是真正的LDAP服务器的踏脚石?

2 个答案:

答案 0 :(得分:0)

不确定你所暗示的是什么" LDAP域名",但域名可以从LDAP中获取来自属性的rootDSE:

defaultNamingContext: DC=YOURDOMAIN,DC=NET

C#是一个广泛的主题,但我看到https://msdn.microsoft.com/en-us/library/aa393248%28v=vs.85%29.aspx显示对rootDSE的访问,并专门显示了defaultNamingContext。

-Jim

答案 1 :(得分:0)

在进一步调查RootDSE之后,我想出了这段代码:

using (DirectoryEntry rootDSE = new DirectoryEntry("LDAP://RootDSE"))
{
    result = (rootDSE.Properties["dnsHostName"].Value ?? "").ToString();
    if (result != "") return result;
}

似乎做了我需要的事。

但是,我上面提到的其他问题仍然没有答案。