2009-06-30 23 views
8

私はC#のLDAPディレクトリに接続していますので、DirectoryEntryクラスを使用しました。私のDirectoryEntryが本当に私のLDAPディレクトリに接続されているかどうかを知る方法?

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

ただし、接続がうまくいかなくても問題なく戻り、ディレクトリエントリ変数が設定されています。

私の接続が実際に開いていることは分かりますか?今、私は非常に醜いハックを使用しています:私は、SchemaEntryのようなDirectoryEntryのメンバーのいくつかがarentしているので、接続が確立されていない場合に例外を生成するif(mydirectory.SchemaEntry)接続が失敗した場合は設定されません。しかし、1:それは醜さスケールで11/10になるはずです2:それは失敗する前に多くの時間がかかります。

これを行うにはどうすればよいですか?確かに、Microsoftは本当に接続しているかどうかを知るために何かを用意しておく必要があります(LDAPディレクトリとActive Directoryを使用していなくても)。

答えて

1

OK(私はSchemaEntryなくNativeObjectを探していたことを除いて)marc_sのソリューションは、私が何をやっていた約だったので。しかし、タイムアウトの遅延は長すぎます(フォームの自動補完値を満たすためにクエリが実行されます)。私は実際には、接続が開いているとふりをして、クエリを実行させることを好むと思います。そうすれば、私は自分自身で、より小さな、タイムアウトの遅延を設定することができます。

11

DirectoryEntryを起動するだけでNOT LDAPストアへの接続を作成します。

プロパティの使用を開始するか、明示的に.NativeObjectプロパティにアクセスすると、実際にはLDAPストアに接続されます。

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

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

マルク・

+0

+1に役立ちます。ありがとう。 – Ksempac

+0

クリーンな説明 – Roshe

2

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

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

+0

残念ながら、真ではありません(.NET 4、2015年にテスト済み)。これは私にとっては恥ずかしいものですが、私は非例外テストを探しています。 DirectoryEntry.Properties自体はnullではありませんが、Countにアクセスしようとしても評価が行われ、エラーが発生するとタイムアウトします(たとえば、切断された場合、「The Server is not operational」)。 – JonBrave

1

DirectoryEntry.Properties.Countを確認できます。それが> 0の場合、有効なオブジェクトです。 しかし、LDAPサーバーがダウンしているとします。あなたはそのproperties.Insteadのいずれかでそれを識別することはできませんあなたがトライ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.* 
}  

希望これは、精度のために、あなた

関連する問題