2009-08-07 141 views
15

簡單的問題,但我無法找到答案的任何地方:活動目錄交易感知?是否支持Active Directory事務處理?

換句話說,將在以下更改被回滾(因爲我沒叫scope.Complete()):

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

如果沒有,是否有可能以某種方式實現這一點?現在我有執行數據庫更新和相應的AD更新的代碼,並且如果它們以某種方式失敗,我已經補償了AD更新的邏輯。這個解決方案遠非最佳。

親切的問候, 羅納德Wildenberg先生

+0

爲什麼你不能測試它自己?我無法找到有關AD是否具有交易意識的清晰文檔 - 我會認爲(並希望!)所以!一般情況下LDAP似乎是交易感知的,至少 – 2009-08-07 20:39:14

+0

目前我正在處理未加入域的計算機......這應該在今天修復,那麼我將執行一些測試。這很奇怪,但是似乎沒有關於此主題的任何文檔。 – 2009-08-10 06:17:02

回答

8

簡短的答案是 - 沒有。 ActiveDirectory本質上是一個LDAP實現(有一些奇特的擴展,但它的核心仍然是LDAP)。 LDAP協議和規範都沒有交易的概念,所以這是不可能的。

這將有可能效仿客戶端上的事務,但你必須自己做,或使用春天,我相信這是會爲你做的 - 顯然這不是因爲服務器端的交易是安全的,你對數據庫的期望。關於Spring的說明 - 我並不完全確定Spring.NET支持LDAP的「事務」,但他們在Spring的Java實現中有類似的東西。這可能值得一看。

通過閱讀CommitChanges方法的文檔,它只是說它將您的更改發送到服務器 - 如果它沒有說明它們是交易安全的話,我會認爲它們不是。

一些隨機的想法 - 我猜這將是可能的,微軟可以添加像這樣到ActiveDirectory的(因爲它是超過只是 LDAP),但他們可能會,如果他們沒有沒有。

+0

我終於有時間和機會做一個小測試,AD不是事務性的。但是,我無法找到任何關於Spring提供LDAP資源事務支持的文檔。你確定他們實施了嗎?當底層資源(例如活動目錄)不支持事務處理時,剩下的唯一選擇是使用支持事務的API封裝資源的(整個)API,並正確響應提交和回滾。它的Java(JNDI)或C#(System.DirectoryServices)無關緊要,但這是我知道的唯一方法。 – 2009-08-17 13:50:08

+0

看一看這個: http://www.springsource.org/ldap 我沒有用過它自己,但那正是我所說的。它說'Spring LDAP提供事務支持',但我的印象是,就像你說的那樣,它是整個LDAP API的封裝,用於跟蹤失敗等並嘗試回滾,重放等。 – macbutch 2009-08-18 05:17:36