2009-08-07 102 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