改变我的域名

时间:2012-02-13 12:40:57

标签: c# active-directory

我有一个函数,它在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:服务器无法运行。

2 个答案:

答案 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文件中设置静态设置即可。域名应该不经常更改,将其作为设置比尝试动态构建它更容易。