在C#中使用ldap的Active Directory

时间:2016-02-04 11:20:55

标签: c# active-directory ldap

我使用了System.DirectoryServices.ActiveDirectory但是当我尝试使用Domain.NameDomain.GetDomain方法时,我收到错误

  

'域'不包含' GetDomain'。

的定义

这是我的代码:

using System;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Collections.Specialized;
using System.DirectoryServices.ActiveDirectory;

public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        DirectoryContext s = new DirectoryContext(DirectoryContextType.Domain, "my domain", "myuser", "mypass");
        Domain domain = Domain.GetDomain(s);

        Forest forest = domain.Forest;

        DomainCollection domains = forest.Domains;

        foreach (Domain objDomain in domains)
        {
             Response.Write(objDomain.Name.ToString());
             Response.Write("<br/>");
        }  
    }
}

问题是什么?

1 个答案:

答案 0 :(得分:0)

根据MSDNGetDomain()是一个静态方法,这意味着它不能在静态上下文之外访问 - 这就是你得到那个特定错误的原因。为了证明这种情况,我只是将您的代码复制并粘贴到控制台应用程序中,默认情况下,该应用程序将从名为Main()的静态void方法运行:

using System;
using System.DirectoryServices.ActiveDirectory;

namespace LDAPTEST
{
    public class Program
    {
         static void Main(string[] args)
         {
             DirectoryContext s = new DirectoryContext(DirectoryContextType.Domain, "DC=hq,DC=xxxxxxxxx,DC=com", "TestUsername", "TestPassword");

             Domain domain = Domain.GetDomain(s);
             Forest forest = domain.Forest;
             DomainCollection domains = forest.Domains;

             foreach (Domain objDomain in domains)
             {
                  Console.Write("");
             }  
         }
     }
}

这将编译并运行。但是,由于您正在开发Asp.Net Web应用程序,我建议使用较低级别System.DirectoryServices.Protocols甚至System.DirectoryServices.AccountManagement命名空间来完成您的任务。