![](/img/trans.png)
[英]Code throwing WebException works in .NET 3.5 but not in 4.0
[英]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.