为什么我的DirectoryEntry突然停止工作?

时间:2012-03-29 12:37:28

标签: binding active-directory directoryservices directoryentry

我一直在使用DirectoryServices命名空间中的DirectoryEntry对象,并且它一直很顺利。但是我对我的一个LDAP类进行了更改,突然之间它已经停止了我的程序的32位版本。

我将ActiveDs引用导入到我的项目中,以便将ADSI对象转换为适当的类型。但从那时起,我的项目在创建DirectoryEntry对象的实例时无法正确绑定。


我尝试过绑定LDAP和WinNT提供程序,但无济于事。我得到的错误是0x80005000未知错误,因为它试图绑定。

即使这个简单的代码也会失败(这并不奇怪,因为绑定是一个关键部分!)

static void Main(string[] args)  
{
    try
    {
        using(var de = new DirectoryEntry("LDAP://servername", "user", "password", AuthenticationType.Secure)
        {
            Console.WriteLine(de.Name)
        }
    }
    catch(Exception ex)
    {
        Console.WriteLine(ex)
    }
}

有什么理由说这应该突然停止工作?引用是否会损坏32位机器上已存在的DLL?

注:
我也尝试使用VBS脚本查询LDAP,但它只是挂起。


Daro建议的结果:

static void Main()
{
   try
   {
        using (var ldap = new LdapConnection(new LdapDirectoryIdentifier("ad1")))
        {
            ldap.Bind();
            using (var de = new DirectoryEntry("LDAP://" + ldap.SessionOptions.DomainName))
            {
                Console.WriteLine(de.Name);
            }
        }
    }
    catch(Exception ex)
    {
        using(var fs = new FileStream("C:\\error.log", FileMode.Create, FileAccess.Write))
        {
            using(var sw = new StreamWriter(fs))
            {
                sw.WriteLine(ex.Message);
                sw.WriteLine(ex.StackTrace);
            }
        }
    }



日志文件生成:
未知错误(0x80005000)
   在System.DirectoryServices.DirectoryEntry.Bind(Boolean throwIfFail)
   在System.DirectoryServices.DirectoryEntry.Bind()
   在System.DirectoryServices.DirectoryEntry.get_Name()
   在C:\ Users \ #username#\ Documents \ Visual Studio 2010 \ Projects \ #project#\ Test \ Program.cs中的Test.Program.Main():第20行

1 个答案:

答案 0 :(得分:0)

这对你有用吗?

        try
        {
            DirectoryEntry de = new DirectoryEntry("LDAP://server", "user", "password",  AuthenticationTypes.Secure);
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex);
        }

我假设“Server”是NetBios名称?尝试使用FQDN。

如果您使用自己的凭据进行绑定,则可以使用:

        DirectoryEntry de = new DirectoryEntry("LDAP://server", null, null, AuthenticationTypes.Secure);

如果您绑定到自己的域,则可以使用:

DirectoryEntry de = new DirectoryEntry("LDAP://" + Environment.UserDomainName, null, null, AuthenticationTypes.Secure);

或简单地说:

DirectoryEntry de = new DirectoryEntry();

我希望有所帮助。