2016-09-13 232 views
0

上LdapConnection類的Active Directory我有一個問題:我需要從遠程服務器到Active Directory連接,但代碼必須使用LdapConnection類。我需要這樣做,因爲這樣我只能在發生某些事件時(例如,用戶已停用或者更改組,數據等)測試更改通知程序。在遠程服務器上的操作系統是Windows Server 2012的連接到使用遠程服務器

我設法使用DirectoryServices用下面的代碼從地方這樣做:

String ldapPath = "LDAP://XRMSERVER02.a24xrmdomain.info"; 
directoryEntry = new DirectoryEntry(ldapPath, @"A24XRMDOMAIN\username", "pass"); 

//// Search AD to see if the user already exists. 
DirectorySearcher search = new DirectorySearcher(directoryEntry); 
search.Filter = "(&(objectClass=user))"; 
SearchResult result = search.FindOne(); 

這是正常的和連接工作,但現在我需要使用LdapConnection連接類。

我想這樣的事情在很多方面,但沒有的,幫助我:

LdapConnection connection = new LdapConnection(XRMSERVER02.a24xrmdomain.info); 
var credentials = new NetworkCredential(@"A24XRMDOMAIN\username", "pass");    
connection.Credential = credentials; 
connection.Bind(); 

它說,證書是無效的,但事實並非如此。

說明:

  • XRMSERVER02 - 的域控制器
  • a24xrmdomain.info - 域名
  • A24XRMDOMAIN - 域名用於登錄

感謝您的幫助。

回答

0

嘗試使用的NetworkCredential構造與3個參數:用戶名,密碼和域名。從用戶名

+0

如果您要監視整個域,我不建議使用更改通知。此技術旨在用於需要監視指定對象或多個對象以更改屬性的情況。在高負載環境中這種技術根本不起作用:您將不會收到關於修改(10K用戶添加到域,並看看會發生什麼)的所有通知。對於整個域中的輪詢更改,請使用DirSync或USN技術。 – oldovets

+0

你的意思是我的通知問題http://stackoverflow.com/questions/39261263/notify-me-when-events-in-active-directory-occur-in-c-sharp ..我使用通知因爲我不知道如何改變其他技術,也許每5秒設置一些TImer來檢查uSNChanged屬性狀態?我有對象的以前的狀態,所以它可以這樣工作。我不確定什麼是其他選項。你能檢查我提供的鏈接上的答案嗎?謝謝 – Dan

+0

對於uSNChanged技術,您可以執行以下步驟:1.連接到DC。 2.從該DC查詢當前highestCommitedUsn(將其命名爲hcusn)(請參閱https://msdn.microsoft.com/zh-cn/library/system.directoryservices.activedirectory.domaincontroller.highestcommittedusn(v=vs.110).aspx) 。 3.如果您需要先前的值,則通過在LDAP過濾器中指定(uSNChanged <= hcusn)來收集來自此DC的當前AD快照。 4.將硬盤存儲在磁盤上。 5.再次連接到同一個DC。 6.查詢highestCommitedUsn(將其命名爲hcusnnew)4.通過在LDAP過濾器中指定&(uSNChanged> hcusn)(uSNChanged <= hcusnew)來收集更改。 – oldovets

0

即使我解決我的問題,我想與其他開發者是我實現迄今共享單獨指定的域。我遇到的問題是我的遠程服務器的OS Windows server 2012和Active目錄。我需要通過本地機器連接他(Windows 10)。 正如我在我的問題說,它是可以做到的是通過DirectoryServices用下面的代碼:

String ldapPath = "LDAP://(DomainController).a24xrmdomain.info"; 
directoryEntry = new DirectoryEntry(ldapPath, @"DOMAIN\username","pass"); 

//// Test search on AD to see if connection works. 
DirectorySearcher search = new DirectorySearcher(directoryEntry); 
search.Filter = "(&(objectClass=user))"; 
SearchResult result = search.FindOne(); 

這是解決方案之一,但因爲我的任務是獲得通知,並確定當過一些對象有在Active Directory中更改,我需要通過LDAP類連接到遠程服務器上的Active Directory。爲獲得通告程序代碼摘自:
- Registering change notification with Active Directory using C#

我成功通過下面的代碼與LDAP類連接:

String ldapPath2 = "(DomainController).a24xrmdomain.info"; 
LdapConnection connection = new LdapConnection(ldapPath2); 
var credentials = new NetworkCredential(@"username", "pass");    
connection.Credential = credentials; 
connection.Bind(); 

要提及的是遠程服務器的IP地址不被需要的,只是域控制器那是用在他身上的,那個用於登錄的域名是不必要的。

快樂編碼