Active Directory是否具有事务感知功能?

Ron*_*erg 16 .net msdtc transactions active-directory

简单的问题,但我无法在任何地方找到答案:是Active Directory事务感知?

换句话说,将回滚以下更改(因为我没有调用scope.Complete()):

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

如果没有,是否有可能以某种方式启用它?现在我有代码执行数据库更新和相应的AD更新,如果它们以某种方式失败,我有AD更新的补偿逻辑.这种解决方案远非最佳.

亲切的问候,罗纳德威尔登伯格

mac*_*tch 9

简短的回答是 - 不.ActiveDirectory本质上是一个LDAP实现(有一些花哨的扩展,但它的核心仍然是LDAP).LDAP协议和规范都没有事务概念,所以这实际上是不可能的.

可以在客户端模拟事务,但你必须自己做或者使用Spring,我相信它会为你做这些 - 显然这不如你期望的服务器端事务安全.一个DB.关于Spring的一个注释 - 我不完全确定Spring.NET是否支持LDAP的"事务",但它们在Spring的Java实现中有类似的东西.这可能值得一看.

通过阅读CommitChanges方法上的文档,它只是说它将您的更改发送到服务器 - 如果它没有说明它们是事务安全的话我会认为它们不是.

一些随机的想法 - 我微软可能会在ActiveDirectory上添加这样的东西(因为它不仅仅是 LDAP),但如果它们还没有,它们可能不会.