[英]How to know if my DirectoryEntry is really connected to my LDAP directory?
我正在連接到C#中的LDAP目錄,所以我使用了DirectoryEntry類。
當您使用地址,登錄名和密碼執行“new DirectoryEntry”時,它應該連接到LDAP目錄。
但是,即使連接不起作用,它也會返回沒有問題,並且設置了directoryentry變量。
所以我知道我的連接真的開了嗎? 現在,我正在使用一個非常非常丑陋的黑客:我放了一個“if(mydirectory.SchemaEntry)”,如果沒有建立連接會產生異常,因為DirectoryEntry的某些成員,例如SchemaEntry,不是如果連接失敗,則設置。 但是1:在丑陋的等級2上必須是11/10:在失敗之前需要花費很多時間。
那么這樣做的好方法是什么? 當然,微軟必須提供一些東西(即使我使用的是LDAP目錄而不是Active Directory)來了解我是否真的已經連接了?
只需“新建”DirectoryEntry就不會創建與LDAP存儲的連接。
只有在您開始使用其屬性或顯式訪問.NativeObject
屬性時,您才會實際獲得與LDAP存儲的連接。
為了確保你已經連接,只需在try ... catch子句中讀出(DirectoryEntry).NativeObject
- 如果它被炸彈,你就會遇到問題,否則你的連接現在已經啟動並處於活動狀態。
不幸的是,據我所知,沒有任何屬性或方法可以調用以確定您是否已使用DirectoryEntry成功連接到LDAP。
渣
您可以檢查DirectoryEntry.Properties.Count。 如果它> 0,則它是一個有效的對象。 .Properties永遠不會為null - 即使您沒有連接到有效的DirectoryEntry,您也可以讀取計數,並且有效的DE將始終至少有一個屬性。
沒有必要的嘗試/捕獲或例外。
好吧,所以marc_s的解決方案大致是我正在做的事情(除了我正在尋找SchemaEntry而不是NativeObject)。 但是超時延遲太長(運行查詢以填充表單的自動完成值)。 我想我其實更喜歡假裝連接已打開並讓查詢運行。 這樣,我可以設置自己的,更小的超時延遲。
您可以檢查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.*
}
希望這對你有所幫助
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.