2016-09-13 182 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地址不被需要的,只是域控制器那是用在他身上的,那个用于登录的域名是不必要的。

快乐编码