2010-09-09 65 views
3

當試圖找到一個LDAP服務器上的用戶,我得到以下錯誤「未知錯誤(0x8000500c)」如何在LDAP服務器上找到用戶

這是我使用的代碼:

PrincipalContext domainContext = new PrincipalContext(ContextType.Domain, "gandalf.intrafg"); 
UserPrincipal p = UserPrincipal.FindByIdentity(domainContext, IdentityType.SamAccountName, "Consultor1"); 

順便說一句,下面的代碼似乎工作(沒有生成異常),但samAccountName通過字節數組。任何人都知道爲什麼?

DirectoryEntry entry = new DirectoryEntry("LDAP://gandalf.intrafg"); 

DirectorySearcher searcher = new DirectorySearcher(entry); 

//searcher.PropertiesToLoad.Add("givenName"); 
//searcher.PropertiesToLoad.Add("sn"); 
searcher.PropertiesToLoad.Add("samAccountName"); 

searcher.Filter = "(&(objectCategory=person)(samAccountName=Consultor1))"; 

SearchResult result = searcher.FindOne(); 
+0

我已經使用LDAP查詢,但我不熟悉您使用的查詢。是你的「(&(objectCategory = person)(samAccountName =」=「+ UserId +」))「有效嗎? – Aliostad 2010-09-09 12:41:09

+0

是的,就像我說的第二塊代碼工作... – 2010-09-09 14:03:31

回答

0

你的第二個代碼塊中工作得很好,但是我沒有在DirectoryEntry的初始化通過域名。

Directory entry = new DirectoryEntry(); 
//other code 
result.Properties["samAccountName"][0].ToString(); 
0

你的代碼應該沒問題 - 它適用於我,沒有任何問題。

不過:你不告訴我們您填寫什麼在這裏domain_name

PrincipalContext domainContext = new PrincipalContext(ContextType.Domain, "domain_name"); 

userId這裏:

UserPrincipal p = UserPrincipal.FindByIdentity(domainContext, IdentityType.SamAccountName, UserId); 

domain_name必須在 「老」 的NetBIOS風格,例如FABRIKAM - 沒有DNS風格,如fabrikam.com或AD風格,如dc=fabrikom,dc=com甚至完整的LDAP路徑。

userId必須是有效的SAM帳戶名稱,例如,最大。只有20個字符,字母和數字(除少數有效的特殊字符外)。

您是否遵守這些要求?

+0

好吧,我已經更新了代碼反映我正在使用的變量... – 2010-09-09 14:02:54

+0

@ bastos.sergio:正如我所料 - 您沒有使用正確的NetBIOS風格的域名 - 您應該有一個域名,例如'GANDALF'或類似的東西 - 只是一個單詞,沒有點 - 它是來自Active Directory時代前的「舊式」域名 – 2010-09-09 14:20:51

+0

如果我把GANDALF與上面的錯誤相同,如果我放入INTRAFG,我得到錯誤「The server could not被聯繫「 – 2010-09-09 17:14:24

相關問題