簡體   English   中英

如何知道我的DirectoryEntry是否真的連接到我的LDAP目錄?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM