2016-10-13 19 views
0

我有一個我有MVC項目的問題。InteropServices.COMException

堆棧是以下內容:在System.DirectoryServices.DirectoryEntry.Bind(布爾throwIfFail)在System.DirectoryServices.DirectoryEntry未知錯誤(0x80005000):

System.Runtime.InteropServices.COMException(0x80005000)。綁定()在System.DirectoryServices.DirectoryEntry.get_Name()在PosmanWeb2.Controllers.Helpers.SessionHelpers.GetGroup(信息搜索結果結果)在PosmanWeb2.Controllers.Helpers.SessionHelpers.GetPerfilAD(信息搜索結果結果)在PosmanWeb2.Controllers.Helpers.SessionHelpers。的getUser()在PosmanWeb2.Controllers.Helpers.SessionHelpers.ConnectActiveDirectory()

上SessionHelpers方法是proyect的一部分,最後一個似乎有問題,代碼如下:

private static List<string> GetGroup(SearchResult result) 
{ 
    List<string> nombresPerfilAD = new List<string>(); 

    foreach (var i in result.Properties["memberOf"]) 
    { 
     var group = new DirectoryEntry(@"LDAP://" + i);  
     nombresPerfilAD.Add(group.Name.Split('=')[1].ToUpper().Trim());    
    } 

    return nombresPerfilAD; 
} 

它通常做的是節省了名單上的所有的Active Directory配置文件。特別

一個用戶沒有這個問題有什麼另外兩個有這種確切的問題。

我看到,它可能涉及到權限問題其他線程,但我不是100%肯定在哪裏看。

+0

試着改變你的代碼,並使用'PrincipalContext'你可以在羣體得到在公元,而不必這樣做舊的LDAP方式 – MethodMan

回答

1

在當前作用域中的一個好的解決方案是不綁定到Active Directory。 result.Properties [「memberOf」]已包含組DN。您可以使用IADsPathName接口(無需連接到AD)獲取名稱(需要添加對ActiveDs com對象的引用)。你也可以使用這個界面來使用特殊字符。例如,如果你的組名是#Test,它將以\ #Test之類的方式返回。因此,你將解決您的問題,提高性能和處理,如果你重寫你的方法通過以下方式字符轉義:

private static List<string> GetGroup(SearchResult result) 
    { 
     List<string> nombresPerfilAD = new List<string>(); 
     IADsPathname pathname = new PathnameClass(); 
     pathname.SetDisplayType(2); 
     pathname.EscapedMode = 4; 

     foreach (string groupDn in result.Properties["memberOf"]) 
     { 
      pathname.Set(groupDn, 4); 
      nombresPerfilAD.Add(pathname.GetElement(0).ToUpper()); 
     } 

     return nombresPerfilAD; 
    } 

這似乎是結合的,而不是用逗號分割是爲了避免情況下,當一組包含逗號的名字。但是,如果組名包含「=」字符呢?舊代碼將不起作用

P.S.如果使用.NET 4,你需要設置嵌入互操作類型爲false ActiveDs屬性(在項目引用)

P.P.S.要知道,memberOf屬性不包含嵌套組(用戶A - > A組,A組 - > B組=>用戶A - > B組)和用戶的主要組

+0

我試圖找到ActiveDs COM對象,這是一個嗎?我有以下內容: 活動DS IIS擴展Dll 活動DS IIS擴展名稱空間提供程序 活動DS類型庫 – Nickso

+0

好的我發現它,它是Active DS類型庫,但是當我嘗試實例化IADsPathname時,它給了我以下錯誤:\t 無法嵌入互操作性類型「ActiveDs.PathnameClass」,請使用適用的接口來代替。 – user3442470

+0

好吧,我改變了財產,抱歉我的錯誤 – user3442470