2016-09-13 3 views
0

문제가 있습니다. 원격 서버에서 Active Directory에 연결해야하지만 코드는 LdapConnection 클래스를 사용해야합니다. 이 방법은 일부 이벤트 (예 : 사용자 비활성화 또는 그룹, 데이터 변경 등)가 발생할 때만 변경 알림을 테스트 할 수 있기 때문에 필요합니다.원격 서버의 LdapConnection 클래스를 사용하여 Active Directory에 연결

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를 사용하여 연결해야합니다 원격 서버의 OS는 2012 년

나는 다음과 같은 코드로 DirectoryServices를 사용하여 로컬에서이 작업을 수행하기 위해 관리되는 윈도우 서버입니다 수업.

나는 여러 가지면에서이 같은 시도하지만 아무도 나를 도왔 :

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

그것은 자격 증명이 유효하지만, 사실이 아니라고 말했다.

설명 :

  • XRMSERVER02 - 도메인 컨트롤러
  • a24xrmdomain.info - 도메인
  • A24XRMDOMAIN - 도메인은 도움을

감사 로깅에 사용됩니다.

답변

0

username, password 및 domain의 세 가지 매개 변수로 NetworkCredential 생성자를 사용해보십시오. 사용자 이름과 별도로 도메인 지정

+0

전체 도메인을 모니터링하려는 경우 변경 알림을 사용하지 않는 것이 좋습니다. 이 기법은 속성 변경을 위해 지정된 객체 또는 여러 객체를 모니터링해야 할 때 사용하도록 설계되었습니다. 고도로로드 된 환경에서이 기술은 단순히 작동하지 않습니다. 변경 사항에 대한 모든 알림을받지 못합니다 (도메인에 10K 사용자를 추가하고 어떤 일이 발생하는지 확인). 전체 도메인의 폴링 변경 사항은 DirSync 또는 USN 기술을 사용하십시오. – oldovets

+0

알림에 관한 내 질문에 의미가 있었나요? http://stackoverflow.com/questions/39261263/notify-me-when-events-in-active-directory-occur-in-c-sharp .. 나는 알림을 사용하고 있습니다. 그 때문에 다른 기법으로 변경하는 방법을 모르겠다. uSNChanged 속성 상태를 확인하기 위해 매 5 초마다 TImer를 설정하는 것이 좋을까요? 전 객체의 이전 상태를 가지고 있으므로 그렇게 작동 할 수 있습니다. 다른 옵션이 무엇인지 잘 모르겠습니다. 제공된 링크에서 내 대답을 확인해 주시겠습니까? 감사합니다 – Dan

+0

uSNChanged 기술의 경우 다음 단계를 수행 할 수 있습니다. 1. DC에 연결하십시오. 2.이 DC (이름은 hcusn)에서 현재 highestCommitedUsn을 쿼리합니다 (https://msdn.microsoft.com/en-us/library/system.directoryservices.activedirectory.domaincontroller.highestcommittedusn(v=vs.110).aspx 참조) . 3. 이전 값이 필요할 경우 LDAP 필터에서 (uSNChanged <= hcusn)을 지정하여이 DC에서 현재 AD 스냅 샷을 수집합니다. 4. 디스크에 hcusn을 저장하십시오. 5. 동일한 DC에 다시 연결하십시오. 6. highestCommitedUsn을 조회하십시오 (hcusnnew 이름). 4. LDAP 필터에서 & (uSNChanged> hcusn) (uSNChanged <= hcusnew)를 지정하여 변경 사항을 수집하십시오. – oldovets

0

내 문제를 해결했지만 다른 개발자와 공유하고 싶습니다. 문제는 내가 OS Windows server 2012과 Active Directory가있는 원격 서버가 있다는 것입니다. 내 로컬 컴퓨터 (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에 연결해야했습니다. 점점 신고자에 대한 코드에서 가져온 것입니다 : - :

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

하는 원격 서버의 어떤 IP 주소가 바로 도메인 컨트롤러 필요하지 않습니다 언급하고 싶
Registering change notification with Active Directory using C#

내가 다음 코드를 통해 LDAP 클래스와 연결에 성공 로그에 사용되는 도메인은 불필요합니다.

해피 코딩