2009-08-07 32 views
15

Câu hỏi đơn giản nhưng tôi không thể tìm thấy câu trả lời ở bất cứ đâu: là nhận thức giao dịch của Active Directory?Nhận biết giao dịch của Active Directory?

Nói cách khác, sẽ thay đổi sau đây được cuộn lại (kể từ khi tôi đã không gọi scope.Complete()):

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

Nếu không, là nó có thể kích hoạt tính năng này bằng cách nào đó? Ngay bây giờ tôi có mã thực hiện cập nhật cơ sở dữ liệu và cập nhật AD tương ứng và tôi đã bù lại logic cho các bản cập nhật AD nếu chúng bằng cách nào đó thất bại. Giải pháp này là tối ưu.

Trân trọng, Ronald Wildenberg

+0

Tại sao bạn không tự mình kiểm tra? Tôi không thể tìm thấy bất kỳ tài liệu rõ ràng về việc có hay không AD là giao dịch nhận thức - Tôi sẽ nghĩ (và hy vọng!) Như vậy! LDAP nói chung dường như là nhận thức giao dịch, ít nhất là –

+0

Hiện tại tôi đang làm việc trên một máy không tham gia vào miền ... Điều đó sẽ được khắc phục ngay hôm nay, vì vậy sau đó tôi sẽ thực hiện một số thử nghiệm. Đó là lạ tuy nhiên dường như không có bất kỳ tài liệu về chủ đề này. –

Trả lời

8

Câu trả lời ngắn gọn là - không. ActiveDirectory về cơ bản là một thực hiện LDAP (với một số phần mở rộng ưa thích nhưng ở cốt lõi của nó vẫn là LDAP). Cả giao thức LDAP lẫn thông số kỹ thuật đều không có khái niệm giao dịch nên điều này thực sự là không thể. Bạn có thể giả lập các giao dịch ở phía khách hàng nhưng bạn phải tự làm điều đó hoặc sử dụng Spring, tôi tin rằng, sẽ làm điều đó cho bạn - rõ ràng điều này không an toàn như các giao dịch phía máy chủ mà bạn 'd mong đợi từ một DB. Một lưu ý về Spring - Tôi không hoàn toàn chắc chắn rằng Spring.NET hỗ trợ 'giao dịch' cho LDAP, nhưng họ có một cái gì đó như thế trong việc thực hiện Java của Spring. Nó có thể đáng xem.

Từ đọc tài liệu trên phương thức CommitChanges, nó chỉ nói rằng nó sẽ gửi các thay đổi của bạn đến máy chủ - nếu nó không làm cho một điểm nói rằng họ đang giao dịch an toàn tôi sẽ giả định rằng họ không.

Vài suy nghĩ ngẫu nhiên - Tôi đoán nó sẽ có thể rằng Microsoft có thể thêm một cái gì đó như thế này vào ActiveDirectory (vì nó là hơn chỉ LDAP) nhưng họ có lẽ sẽ không nếu họ không có được nêu ra.

+0

Cuối cùng tôi đã có thời gian và cơ hội để làm một thử nghiệm nhỏ và AD không phải là giao dịch. Tuy nhiên, tôi không thể tìm thấy bất kỳ tài liệu nào về hỗ trợ giao dịch cung cấp Mùa xuân cho tài nguyên LDAP. Bạn có chắc là họ thực hiện điều này không? Khi tài nguyên cơ bản (Active Directory chẳng hạn) không nhận biết giao dịch, tùy chọn duy nhất bạn còn lại là bọc toàn bộ API của tài nguyên bằng API nhận biết giao dịch và trả lời chính xác cho các cam kết và tự phục hồi. Nó không thực sự quan trọng cho dù Java của nó (JNDI) hoặc C# (System.DirectoryServices) nhưng đây là cách duy nhất tôi biết. –

+0

Hãy xem điều này: http://www.springsource.org/ldap Tôi đã không sử dụng nó bản thân mình nhưng đó là những gì tôi đã nói về.Nó nói 'Spring LDAP cung cấp hỗ trợ giao dịch' nhưng ấn tượng của tôi rằng nó là, như bạn nói, một wrapper trên toàn bộ LDAP API mà theo dõi thất bại vv và cố gắng để rollback, phát lại vv – macbutch

1

Không. LDAP không trực tiếp hỗ trợ giao dịch, tuy nhiên, bạn có thể thực hiện giải pháp 'cuộn của riêng bạn' bằng cách viết một lớp enlistment triển khai Giao diện thông báo cho IEnlistment. IEnlistmentNotification làm việc với cả giao dịch ngầm định và ngầm định trong không gian tên System.Transactions.

Bạn có thể tìm thêm tài liệu (và ví dụ) tại đây: https://msdn.microsoft.com/en-us/library/system.transactions.ienlistmentnotification(v=vs.110).aspx

Các vấn đề liên quan