8

C# で LDAP ディレクトリに接続しているので、DirectoryEntry クラスを使用しました。

アドレス、ログイン、およびパスワードを使用して「新しい DirectoryEntry」を実行すると、LDAP ディレクトリに接続することになっています。

ただし、接続が機能しなかった場合でも、問題なく返され、directoryentry 変数が設定されます。

だから私は私の接続が本当に開かれていることを知っていますか? 現在、私は非常に醜いハックを使用しています。接続が確立されていない場合に例外を生成する「if(mydirectory.SchemaEntry)」を配置しました。接続に失敗した場合は設定されません。しかし 1:それは醜さのスケールで 11/10 でなければなりません 2:それは失敗するまでに多くの時間がかかります.

では、これを行う良い方法は何ですか? 確かに、Microsoft は、(Active Directory ではなく LDAP ディレクトリを使用している場合でも) 私が本当に接続しているかどうかを知るために何かを提供しているに違いありません。

4

4 に答える 4

12

DirectoryEntry を「新規作成」するだけでは、LDAP ストアへの接続は作成されません。

プロパティの使用を開始するか、プロパティに明示的にアクセスする場合にのみ、.NativeObject実際に LDAP ストアへの接続を取得します。

(DirectoryEntry).NativeObject接続されていることを確認するには、try...catch 句を読んでください。問題が発生した場合は、問題が発生しています。そうでない場合は、接続が確立されてアクティブになっています。

残念ながら、私の知る限り、DirectoryEntry を使用して LDAP に正常に接続したかどうかを確認するために呼び出すことができるプロパティまたはメソッドはありません。

マルク

于 2009-06-30T14:14:59.867 に答える
2

DirectoryEntry.Properties.Count を確認できます。> 0 の場合、有効なオブジェクトです。.Properties が null になることはありません。有効な DirectoryEntry に接続していなくてもカウントを読み取ることができ、有効な DE には常に少なくとも 1 つのプロパティがあります。

try/catch または例外は必要ありません。

于 2010-10-05T12:56:48.803 に答える
1

DirectoryEntry.Properties.Count を確認できます。> 0 の場合は、有効なオブジェクトです。それでも、LDAP サーバーがダウンしているとしましょう。どのプロパティでも識別できません。代わりに、try catch ブロックを使用してキャッチできます。

try         
{    
     entry = new DirectoryEntry("priorityLDAPServer", sUserName, sPassword, AuthenticationTypes.None);      
   if(entry.Properties.Count > 0) 
   {               
        object o = entry.NativeObject;        
     `   next need to check user record in application database`      
   }
 }        
    catch (System.Runtime.InteropServices.COMException comex)       
{    

 //throws you the error if LDAP   server is down or wrong "Server is invalid "          
 //  you can further do a nested try catch within this block if you to try a     optional LDAP server.*
}       

これがお役に立てば幸いです

于 2015-07-06T10:39:25.637 に答える