簡體   English   中英

DirectoryEntry()在.NET 4.0中工作,但在.NET 3.5中不是嗎?

[英]DirectoryEntry() works in .NET 4.0 but in .NET 3.5 doesn't?

我有一個Intranet,需要為AD系統中的用戶運行查詢。 我試圖使用DirectoryEntry()對象進行連接,然后設置DirectorySearcher()並搜索用戶。 歸根結底,我的代碼是這樣的:

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對象實際上沒有在第一行正確初始化。 構造函數不會失敗,但是所有屬性都將引發異常。

有什么想法我可能做錯了嗎? 謝謝,我意識到這是一個棘手的模糊問題。


解決了

好的,我設法通過對DirectoryEntry()構造函數使用重載來解決此問題,該構造函數接受了用戶名和密碼:

DirectoryEntry directoryObject = new DirectoryEntry("LDAP://RD-HQ/CN=Users,DC=rd-hq,DC=local", "rd-hq.local\mick", "notmypassword");

我仍然不確定為什么它在.NET3.5版本與.NET4.0版本中會有所不同,並且會愉快地將答案標記為正確,這至少可以幫助我更好地理解這些知識。

構造函數不會失敗,但是所有屬性都將引發異常。

當您訪問相關屬性之一時, DirectoryEntry實例將嘗試綁定到目錄-如果失敗,則屬性訪問器將引發異常。 如果嘗試從調試器查看屬性,也會發生這種情況。

在上面的代碼中,綁定是在調用ds.FindAll()時發生的。

顯然,綁定到目錄存在問題。

我很難相信.NET Framework版本會有所作為。 我會將您的代碼精簡為一個簡單的示例,對於.NET 3.5和.NET 4版本,您將使用相同的代碼和相同的環境。

錯誤消息“發生操作錯誤”相當普遍,但是如果您沒有訪問目錄的權限,則可能會發生。 因此,一種可能性是您的.NET 3.5和.NET 4版本以不同的身份運行。 至少這似乎是造成類似問題的原因。

DirectoryCOMException返回的ErrorCode也可能提供線索。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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