我一直在使用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行
答案 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();
我希望有所帮助。