2009-08-07 6 views
15

Domanda semplice ma non riesco a trovare la risposta da nessuna parte: è compatibile con le transazioni di Active Directory?Active Directory riconosce la transazione?

In altre parole, sarà la seguente modifica eseguire il rollback (dal momento che non ho chiamato scope.Complete()):

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

In caso contrario, è possibile attivare questo in qualche modo? In questo momento ho il codice che esegue gli aggiornamenti del database e gli aggiornamenti AD corrispondenti e ho una logica di compensazione per gli aggiornamenti AD, se in qualche modo falliscono. Questa soluzione è tutt'altro che ottimale.

Cordiali saluti, Ronald Wildenberg

+0

Perchè non riesci a provare voi stessi? Non riesco a trovare documenti chiari sul fatto che AD sia o meno consapevole delle transazioni - penserei (e spero!) Così! LDAP in generale sembra essere sensibile alle transazioni, almeno –

+0

Al momento sto lavorando su una macchina che non è unita a un dominio ... Dovrebbe essere corretto oggi, quindi eseguirò alcuni test. È strano tuttavia non sembra esserci alcuna documentazione su questo argomento. –

risposta

8

risposta breve è - n. ActiveDirectory è essenzialmente un'implementazione LDAP (con alcune estensioni fantasiose ma al suo centro è ancora LDAP). Né i protocolli LDAP né le specifiche hanno il concetto di transazioni, quindi questo non è possibile.

Sarebbe possibile emulare transazioni sul lato client ma dovresti farlo tu stesso o utilizzare Spring che, credo, lo farà per te - ovviamente questo non è sicuro come le transazioni lato server che tu mi aspetto da un DB. Una nota su Spring: non sono completamente sicuro che Spring.NET supporti le "transazioni" per LDAP, ma hanno qualcosa di simile nell'implementazione Java di Spring. Potrebbe valere la pena dare un'occhiata.

Dalla lettura dei documenti sul metodo CommitChanges si dice solo che invia le modifiche al server - se non ha il senso di dire che sono sicuri per le transazioni, suppongo che non lo siano.

Alcuni pensieri casuali - Mi immagino sarebbe possibile che Microsoft potrebbe aggiungere qualcosa di simile su ActiveDirectory (come è più che solo LDAP), ma probabilmente non se non l'hanno ancora.

+0

Finalmente ho avuto il tempo e l'opportunità di fare un piccolo test e AD non è transazionale. Tuttavia, non riesco a trovare alcuna documentazione su Spring offrendo il supporto delle transazioni per le risorse LDAP. Sei sicuro che lo implementino? Quando la risorsa sottostante (ad esempio, Active Directory) non riconosce la transazione, l'unica opzione rimasta è quella di avvolgere l'API (intera) della risorsa con un'API compatibile con la transazione e rispondere correttamente ai commit e al rollback. Non importa se è Java (JNDI) o C# (System.DirectoryServices), ma questo è l'unico modo che conosco. –

+0

Date un'occhiata a questo: http://www.springsource.org/ldap Non l'ho usato da solo ma è quello di cui stavo parlando.Dice "Spring LDAP fornisce il supporto per le transazioni" ma la mia impressione è che, come dici tu, un wrapper su tutta l'API LDAP che tiene traccia degli errori, ecc., E tenta di eseguire il rollback, la riproduzione, ecc. – macbutch