2009-08-07 7 views
15

간단한 질문이지만 어디서나 대답을 찾을 수 없습니다 : Active Directory는 트랜잭션을 인식합니까? (나는 scope.Complete()를 호출하지 않았기 때문에)Active Directory는 트랜잭션을 인식합니까?

즉, 다음과 같이 변경이 롤백됩니다하지 않으면

using (var scope = new TransactionScope()) 
{ 
    DirectoryEntry entry = ...; 
    entry.Properties["givenName"].Value = "New Given Name"; 
    entry.CommitChanges(); 
} 

, 그것은 가능하다 어떻게 든이 가능하도록? 지금 데이터베이스 업데이트 및 해당 AD 업데이트를 수행하는 코드가 있으며 어떻게 든 실패하면 AD 업데이트에 대한 논리를 보완합니다. 이 솔루션은 최적이 아닙니다.

종류와 관련, 로널드 빌덴 베르크

+0

왜 당신이 직접 테스트 할 수 없습니다? 광고가 트랜잭션을 인식하는지 여부에 대한 명확한 문서를 찾을 수 없습니다. 나는 생각합니다 (그리고 희망!)! LDAP는 일반적으로 트랜잭션을 인식합니다. 최소한 –

+0

현재 도메인에 가입하지 않은 컴퓨터에서 작업하고 있습니다 ... 오늘은 수정해야하므로 몇 가지 테스트를 수행 할 것입니다. 그러나이 주제에 대한 어떠한 문서도 보이지 않는 것은 이상합니다. –

답변

8

짧은 대답은 - 아니. ActiveDirectory는 본질적으로 LDAP 구현입니다 (일부 멋진 확장이 있지만 핵심은 여전히 ​​LDAP 임). LDAP 프로토콜이나 사양에는 트랜잭션 개념이 없으므로 실제로는 불가능합니다.

클라이언트 측에서 트랜잭션을 에뮬레이트 할 수는 있지만 자신이해야하거나 사용하는 Spring을 사용해야합니다. 분명히 이것은 서버 측 트랜잭션만큼 안전하지 않습니다. DB에서 기대하고 있습니다. 스프링 노트 - Spring.NET이 아직 LDAP에 대한 '트랜잭션'을 지원하는지는 아직 확실하지 않지만, 스프링 구현은 자바 구현과 비슷합니다. 보기에 가치가 있을지도 모른다.

CommitChanges 메서드에서 문서를 읽는 것만으로 변경 내용이 서버에 전송된다고 말합니다. 트랜잭션이 안전하다고 말하는 점이 없다면 나는 그렇지 않다고 가정합니다.

어떤 임의의 생각 - 나는 (그 이상 단지 LDAP처럼) 마이크로 소프트 액티브 디렉토리에이 같은 것을 추가 할 수 있지만, 그들은 아마도 그들이 아직하지 않을 경우 가능성이 될 것 추측 .

+0

드디어 작은 테스트를 할 수있는 기회와 시간이 있었으며 AD는 트랜잭션 적이 아닙니다. 그러나 LDAP 리소스에 대한 Spring 제공 트랜잭션 지원에 대한 설명서를 찾을 수 없습니다. 당신은 그들이 이것을 구현한다고 확신합니까? 기본 리소스 (예 : Active Directory)가 트랜잭션을 인식하지 못하는 경우 남은 유일한 옵션은 트랜잭션 인식 API로 리소스의 (전체) API를 래핑하고 커밋 및 롤백에 올바르게 응답하는 것입니다. Java (JNDI) 또는 C# (System.DirectoryServices)인지 여부는 중요하지 않지만 이것이 내가 아는 유일한 방법입니다. –

+0

이것 좀보세요 : http://www.springsource.org/ldap 저는 직접 사용하지 않았지만 그것이 제가 말했던 것입니다.그것은 'Spring LDAP는 트랜잭션 지원을 제공한다'고 말하지만, 당신이 말한 것처럼, 실패 ​​등을 추적하고 롤백, 재연 등을 시도하는 전체 LDAP API에 대한 래퍼라는 인상입니다. – macbutch

1

아니요 LDAP는 트랜잭션을 직접 지원하지 않지만 IEnlistmentNotification 인터페이스를 구현하는 등록 클래스를 작성하여 '자체 솔루션'을 롤업하는 것이 가능합니다. IEnlistmentNotification은 System.Transactions 네임 스페이스의 명시 적 트랜잭션과 암시 적 트랜잭션과 함께 작동합니다.

현재 많은 문서 (그리고 예를) 찾을 수 https://msdn.microsoft.com/en-us/library/system.transactions.ienlistmentnotification(v=vs.110).aspx

관련 문제