我有一个函数,它在Active Directory中为Intranet应用程序返回用户名:
public string GetCurrentUsersName()
{
//Get the username and domain information
string user = Environment.UserName;
string domainName = Environment.UserDomainName;
//Set the correct format for the AD query and filter
string ldapQueryFormat = @"LDAP://" + domainName + ".com/DC=" + domainName + ",DC=com";
string queryFilterFormat = @"(&(samAccountName=" + user + ")(objectCategory=person)(objectClass=user))";
SearchResult result = null;
using (DirectoryEntry root = new DirectoryEntry(ldapQueryFormat))
{
using (DirectorySearcher searcher = new DirectorySearcher(root))
{
searcher.Filter = queryFilterFormat;
SearchResultCollection results = searcher.FindAll();
result = (results.Count != 0) ? results[0] : null;
}
}
//Get the email property from AD
string name = result.Properties["displayName"][0] as string;
return name;
}
我最近将域名从mycompany.com更改为mycompany.local。每当我尝试运行此方法时,我现在都会收到错误,我应该更改某些内容吗? string domainName用于等于mycompany,但现在它等于myco,就像我使用的域名一样。
我收到的错误是:
System.Runtime.InteropServices.COMException:服务器无法运行。
答案 0 :(得分:1)
如果您最近将域名从mycompany.com更改为mycompany.local,则AD查询和过滤器的正确格式应如下所示:
//Set the correct format for the AD query and filter
string ldapQueryFormat = @"LDAP://" + domainName + ".local/DC=" + domainName + ",DC=local";
用'local'替换'Com'
答案 1 :(得分:0)
是否有理由动态构建域字符串?不同用户或情况会有所不同吗?如果没有,为什么不将其定义为配置设置?您可以从Active Directory获取域的LDAP地址,然后只需在网站的web.config文件中设置静态设置即可。域名应该不经常更改,将其作为设置比尝试动态构建它更容易。