Dot-Net

Active Directory 事務感知嗎?

  • January 7, 2017

簡單的問題,但我在任何地方都找不到答案: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),但如果他們還沒有的話,他們可能不會。

引用自:https://stackoverflow.com/questions/1244985