1

私は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

答えて

0

これは機能しますか?

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

「サーバー」は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(); 

私は役立つことを願っています。

+0

DirectoryEntryオブジェクトとのバインディングは失敗します。 IPアドレスとFQDNを使用しました。まだnada。 しかし、Protocols名前空間でLdapConnectionクラスを使用すると、Ldapに接続できます。 – mrstebo

+0

投稿したコードのビットが同じエラーの原因になりますか?何について:=新しいLdapConnection(Environment.UserDomainName) { LdapConnection LCをしてみてください。 lc.Bind(); ; のDirectoryEntryデ=新しいDirectoryEntryを( "LDAP://" + lc.SessionOptions.DomainName)。 string Name = de.Name; }キャッチ(例外EX) {Console.WriteLineを(EX)。 } ldp.exeを使用してバインドできますか? – Daro

+0

私は、LdapConnectionクラスを使用してきたが、それはDirectoryEntryのインスタンスを使用する必要があるときに、それが結合に例外(0X80005000)をスローします。 – mrstebo

関連する問題