我有一個Intranet需要在AD系統中爲用戶運行查詢。我嘗試使用DirectoryEntry()對象進行連接,然後設置DirectorySearcher()併爲用戶執行搜索。歸結爲這是最基本的,我的代碼是這樣的:DirectoryEntry()在.NET 4.0中工作,但在.NET 3.5中不工作?
DirectoryEntry directoryObject = new DirectoryEntry("LDAP://RD-HQ/CN=Users,DC=rd-hq,DC=local");
DirectorySearcher ds = new DirectorySearcher(directoryObject);
ds.Filter = ("(&(objectClass=user))");
var test = ds.FindAll();
foreach (SearchResult item in test)
{
}
古怪,這個工程我的機器上時,我引用的System.DirectoryServices DLL的.NET4.0版本,但不是在.NET3。 5(其中System.DirectoryServices DLL的版本是v2.0.0.0)。
特定的錯誤我得到的是對ds.FindAll()
方法中記載:
異常詳細信息:System.DirectoryServices.DirectoryServicesCOMException:發生操作錯誤。
單步執行代碼表明directoryObject
對象實際上並未在第一行正確初始化。構造函數不會失敗,但所有屬性都拋出異常。
任何想法我可能做錯了什麼?謝謝,我意識到這是一個蹩腳,模糊的問題。
解決
OK,我設法通過使用重載接受了一個用戶名和密碼的DirectoryEntry()構造函數來解決這個問題:
DirectoryEntry directoryObject = new DirectoryEntry("LDAP://RD-HQ/CN=Users,DC=rd-hq,DC=local", "rd-hq.local\mick", "notmypassword");
我仍然不知道爲什麼這在.NET3.5版本和.NET4.0版本中的作用是不同的,並且會很高興地標記爲正確的答案,至少可以幫助我更好地理解這些東西。
謝謝,很好的信息。我意識到在這樣的問題中存在很多變量,因此無法給出明確的答案(什麼是IIS設置,什麼是AD設置,Web.config文件中有什麼?)。但肯定你說過的話有幫助。 –