私はDirectoryServices名前空間のDirectoryEntryオブジェクトを使って作業していて、とてもうまくいっています。しかし、私は自分のLDAPクラスの1つに変更を加えましたが、突然それが私のプログラムの32ビットビルドの作業を停止しました。
ADSIオブジェクトを適切な型に変換するために、ActiveDs参照をプロジェクトにインポートしました。しかしそれ以来、私のプロジェクトはDirectoryEntryオブジェクトのインスタンスを作成するときに正しくバインドできません。
私はLDAPとWinNTプロバイダとのバインドを試みましたが、役に立たないです。バインドしようとすると、私が受け取るエラーは0x80005000です。
でもこの単純なコードが失敗した(結合のような驚くべきことではありませんこれは重要な部分です!)
なぜ私のDirectoryEntryが突然動作を停止しましたか?
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);
}
}
}
ログファイルが生成されます。 System.Diで
不明なエラー(0X80005000)
CでTest.Program.MainでSystem.DirectoryServices.DirectoryEntry.get_NameでSystem.DirectoryServices.DirectoryEntry.BindでrectoryServices.DirectoryEntry.Bind(ブールthrowIfFail)
()
()
():\ Users \ユーザー#ユーザー名#¥Documents¥Visual Studio 2010¥Projects¥#project#¥Test¥Program.cs:line 20
DirectoryEntryオブジェクトとのバインディングは失敗します。 IPアドレスとFQDNを使用しました。まだnada。 しかし、Protocols名前空間でLdapConnectionクラスを使用すると、Ldapに接続できます。 – mrstebo
投稿したコードのビットが同じエラーの原因になりますか?何について:=新しいLdapConnection(Environment.UserDomainName) { LdapConnection LCをしてみてください。 lc.Bind(); ; のDirectoryEntryデ=新しいDirectoryEntryを( "LDAP://" + lc.SessionOptions.DomainName)。 string Name = de.Name; }キャッチ(例外EX) {Console.WriteLineを(EX)。 } ldp.exeを使用してバインドできますか? – Daro
私は、LdapConnectionクラスを使用してきたが、それはDirectoryEntryのインスタンスを使用する必要があるときに、それが結合に例外(0X80005000)をスローします。 – mrstebo