Я столкнулся с одной серьезной проблемой при получении NetBiosName на уровне поддомена. Ниже приведен фрагмент кода, который я использую для получения NetBiosName из Active Directory. Howerver, этот код отлично работает для корневого / родительского домена и не работает на поддомене.
public string GetDomainNetBios(string sDomainFqdn, NetworkCredential netCred)
{
string sNetBios = string.Empty;
try
{
lock (connectionLock)
{
SearchResponse dirRes = (SearchResponse) LdapConnectionUsers.SendRequest(new
SearchRequest(
null,
"configurationNamingContext=*",
SearchScope.Base,
"configurationNamingContext"
));
if (dirRes != null)
{
string sConfPartDn =
dirRes.Entries[0].Attributes["configurationNamingContext"][0].ToString();
dirRes = (SearchResponse) LdapConnectionUsers.SendRequest(new SearchRequest(
sConfPartDn,
String.Format(CultureInfo.InvariantCulture, "(&(nETBIOSName=*)(dnsRoot={0}))", sDomainFqdn),
SearchScope.Subtree,
"nETBIOSName"
));
}
if (dirRes != null && dirRes.Entries.Count > 0)
{
sNetBios = dirRes.Entries[0].Attributes["nETBIOSName"][0].ToString();
}
_netBiosDomainName = sNetBios;
if (!netBiosDictionry.ContainsKey(_currentDomain))
netBiosDictionry.Add(_currentDomain, _netBiosDomainName);
}
return sNetBios;
}
catch (Exception ex)
{
Common.TraceError(Common.TraceChannel, String.Format(CultureInfo.InvariantCulture,
"GetDomainNetBios operation failed due to {0}", (ex).Message));
throw ex;
}
}
SearchScope.Subtree перемещает вызов в корневой / родительский домен, однако, поскольку пользователь в поддомене не аутентифицирован в родительский домен / root поиск не выполняется. Как получить NetBiosName на том же уровне поддомена? Я пробовал следующие вещи:
- SearchScope.OneLevel и SearchScope.Base, которые ограничивают вызовы субдомена, но не повезло, и NetBiosName становится пустым.
- Удалено dnsRoot = полностью Полное доменное имя из запроса. Но я получаю тот же результат. NetBiosName пусто.
Следовательно, я хочу получить NetBiosName в субдомене.
Кто-нибудь может помочь в этом?