代码之家  ›  专栏  ›  技术社区  ›  Ronald Wildenberg

Active Directory事务感知吗?

  •  15
  • Ronald Wildenberg  · 技术社区  · 15 年前

    这个问题很简单,但我在任何地方都找不到答案:Active Directory事务感知吗?

    换句话说,下面的更改是否会回滚(因为我没有调用 scope.Complete() ):

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

    如果没有,是否有可能以某种方式启用此功能?现在,我有代码执行数据库更新和相应的广告更新,如果广告更新失败,我有补偿逻辑。这个解决方案远远不是最优的。

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

    2 回复  |  直到 15 年前
        1
  •  10
  •   macbutch    15 年前

    简短的回答是-不。ActiveDirectory本质上是一个LDAP实现(有一些奇特的扩展,但其核心仍然是LDAP)。LDAP协议和规范都没有事务的概念,因此这实际上是不可能的。

    在客户端模拟事务是可能的,但您必须自己来做,或者使用Spring,我相信Spring会为您做到这一点——显然,这不像您期望从DB中进行的服务器端事务那样安全。关于Spring的一个注意事项——我还不能完全确定Spring.NET是否支持LDAP的“事务”,但它们在Spring的Java实现中有类似的功能。也许值得一看。

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

    一些随机的想法-我 猜测 只是 LDAP),但如果还没有,他们可能不会。

        2
  •  1
  •   joe.finsterwald    8 年前

    不支持。LDAP不直接支持事务,但是,可以通过编写实现IEnlistmentNotification接口的登记类来“滚动您自己的”解决方案。IEnlistmentNotification可用于System.transactions命名空间中的显式和隐式事务。

    您可以在此处找到更多文档(和示例): https://msdn.microsoft.com/en-us/library/system.transactions.ienlistmentnotification(v=vs.110).aspx