2010-07-08 62 views
2

我試圖從Active Directory中加載tokenGroups,但一旦部署到Windows Server(2003)後它就無法運行。我想不通爲什麼,因爲它工作在當地罰款......如何從Windows Server 2003上的活動目錄獲取tokenGroups?

這是我的錯誤:

There is no such object on the server.

這裏是我的代碼(SID變量是當前用戶的SecurityIdentifier從HttpContext的拉):

DirectoryEntry userDE = new DirectoryEntry(string.Format("LDAP://<SID={0}>", sid.Value)) 
userDE.RefreshCache(new[] { "tokenGroups" }); 

var tokenGroups = userDE.Properties["tokenGroups"] as CollectionBase; 
groups = tokenGroups.Cast<byte[]>() 
    .Select(sid => new SecurityIdentifier(sid, 0)).ToArray(); 

任何想法,爲什麼我會得到那個錯誤?

UPDATE:錯誤實際發生的RefreshCache線

+0

在構造函數調用之後,您是否有'userDE'的有效值?該用戶是否真的存在?或者您需要提供在您的LDAP路徑中使用的服務器? 「沒有這樣的對象」似乎表明用戶只是普通不存在....(或由於例如權限而無法找到) – 2010-07-08 17:57:20

+0

是否可能是因爲sid屬於客戶端上的本地用戶,而不是活動目錄用戶? – apoorv020 2010-07-08 18:00:23

回答

2

你有構造函數調用後userDE一個有效的值?該用戶是否真的存在?或者您需要提供在您的LDAP路徑中使用的服務器?

錯誤消息No such object on server似乎預示着用戶只是簡單的不存在....(或無法找到,例如由於權限)

試試這個 - 不知道如果是這樣的問題,但它是值得一試 - 它 應該工作:

DirectoryEntry userDE = new DirectoryEntry(string.Format("LDAP://<SID={0}>", sid.Value)) 
userDE.RefreshCache(new string[] { "tokenGroups" }); 

嘗試使用 new string[],而不是僅僅 new[]

+0

有沒有,它沒有工作... – 2010-07-08 17:55:36

+0

啊,讓我檢查...我猜是因爲這個廣告的東西的作品,它可能不會給我的錯誤,直到該RefreshCache調用...我會檢查就可以了,希望這是我的問題 – 2010-07-08 18:00:33

+0

你真的需要權限來查找sid嗎? – apoorv020 2010-07-08 18:09:23

相關問題