Dot-Net
Active Directory 事務感知嗎?
簡單的問題,但我在任何地方都找不到答案:Active Directory 事務感知嗎?
換句話說,是否會回滾以下更改(因為我沒有呼叫
scope.Complete()):using (var scope = new TransactionScope()) { DirectoryEntry entry = ...; entry.Properties["givenName"].Value = "New Given Name"; entry.CommitChanges(); }如果沒有,是否有可能以某種方式啟用它?現在我有執行數據庫更新和相應的 AD 更新的程式碼,如果 AD 更新以某種方式失敗,我有補償邏輯。該解決方案遠非最佳。
親切的問候,羅納德·維爾登伯格
簡短的回答是——不。ActiveDirectory 本質上是一個 LDAP 實現(有一些花哨的擴展,但它的核心仍然是 LDAP)。LDAP 協議和規範都沒有事務的概念,所以這確實是不可能的。
可以在客戶端模擬事務,但您必須自己做或使用 Spring,我相信它會為您做到這一點 - 顯然這不像您期望的伺服器端事務那樣安全數據庫。關於 Spring 的註釋 - 我不完全確定 Spring.NET 是否支持 LDAP 的“事務”,但它們在 Spring 的 Java 實現中有類似的東西。可能值得一看。
通過閱讀有關 CommitChanges 方法的文件,它只是說它將您的更改發送到伺服器 - 如果它沒有說明它們是事務安全的,我會假設它們不是。
一些隨機的想法——我猜微軟可能會在 ActiveDirectory 中添加這樣的東西(因為它不僅僅是LDAP),但如果他們還沒有的話,他們可能不會。