2009-08-07 10 views
15

簡単な質問ですが、どこでも答えが見つかりません:Active Directoryはトランザクションを認識していますか? (私はscope.Complete()を呼び出すことはありませんでしたので)Active Directoryはトランザクション対応ですか?

言い換えれば、以下の変更がロールバックされます。そうでない場合

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

が、それは可能ですが、何とかこれを有効にしますか?今私はデータベースの更新と対応するADの更新を実行するコードがあり、何とか失敗した場合、私はADの更新のためのロジックを補正しています。この解決策は最適ではありません。

敬具、 ロナルドWildenberg

+0

なぜあなたはそれを自分でテストすることはできませんか?私は、ADが取引を意識しているかどうかについて明確な文書を見つけることができません - 私は(そして望みます)そう思います! LDAPは一般的にトランザクション対応であると思われます。少なくとも –

+0

現在、私はドメインに参加していないマシンで作業しています...それは今日修正されるはずですので、いくつかのテストを行います。しかし、この話題に関する文書はないように見えるのは不思議です。 –

答えて

8

短い答えは - いいえ。 ActiveDirectoryは本質的にLDAP実装です(いくつかの拡張機能がありますが、それはまだLDAPのままです)。 LDAPプロトコルも仕様もトランザクションの概念を持っていないので、これは実際には不可能です。

クライアント側でトランザクションをエミュレートすることは可能ですが、自分で行うか、Springを使用する必要があります。私はそれがあなたのためになると信じています。これはサーバーサイドのトランザクションほど安全ではありませんDBから期待しています。 Springに関する注釈 - 私は、Spring.NETがまだLDAPのための 'トランザクション'をサポートしているのかどうかは十分にはわかりませんが、SpringのJava実装ではそういうものがあります。それは一見価値があるかもしれません。

CommitChangesメソッドのドキュメントを読むと、サーバーに変更が送信されたというメッセージが表示されます。トランザクションセーフであると言っても意味がない場合は、そうではないと判断します。

いくつかのランダムな思考 - 私は(それ以上だけ LDAPあるとして)MicrosoftはActiveDirectoryの上にこのような何かを追加することができますが、彼らはおそらく、彼らはまだいない持っていない場合ということは可能であろうを推測

+0

私はついに小さなテストをする時間と機会があり、ADはトランザクションではありません。しかし、私は、LDAPリソースのSpring提供トランザクションのサポートに関するドキュメントを見つけることができません。彼らはこれを実装すると確信していますか?基礎となるリソース(インスタンスのActive Directoryなど)がトランザクション対応でない場合は、トランザクション認識APIを使用してリソースのAPI全体をラップし、コミットおよびロールバックに正しく応答する必要があります。 Java(JNDI)かC#(System.DirectoryServices)かどうかは問題ではありませんが、これが私が知る唯一の方法です。 –

+0

これを見てください: http://www.springsource.org/ldap 私はそれを自分で使っていませんが、それは私が話していたものです。「Spring LDAPはトランザクションサポートを提供する」と言っていますが、あなたが言うように、失敗などを追跡してロールバック、再生などを試みるLDAP API全体のラッパーです。 – macbutch

1

いいえLDAPはトランザクションを直接サポートしていませんが、IEnlistmentNotificationインターフェイスを実装する入会クラスを作成することで、独自のソリューションをロールバックすることは可能です。 IEnlistmentNotificationは、System.Transactions名前空間の明示的トランザクションと暗黙的トランザクションの両方で機能します。

あなたがここでより多くのドキュメント(および例)を見つけることができます:https://msdn.microsoft.com/en-us/library/system.transactions.ienlistmentnotification(v=vs.110).aspx