2009-08-07 11 views
15

Pregunta simple pero no puedo encontrar la respuesta en ninguna parte: ¿es consciente de la existencia de Active Directory?¿Es consciente de la existencia de Active Directory?

En otras palabras, será el siguiente cambio se deshace (ya que no me llamo scope.Complete()):

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

Si no es así, ¿es posible habilitar esto de alguna manera? Ahora mismo tengo un código que realiza las actualizaciones de la base de datos y las correspondientes actualizaciones de AD, y tengo una lógica de compensación para las actualizaciones de AD si de alguna manera fallan. Esta solución está lejos de ser óptima.

Saludos cordiales, Ronald Wildenberg

+0

¿Por qué no se puede probar por sí mismo? No puedo encontrar ningún documento claro sobre si AD es o no consciente de las transacciones; lo pensaría (¡y espero!) ¡Así que! LDAP en general parece ser consciente de las transacciones, al menos –

+0

En este momento estoy trabajando en una máquina que no está unida a un dominio ... Eso debería arreglarse hoy, entonces realizaré algunas pruebas. Es extraño, sin embargo, no parece haber documentación sobre este tema. –

Respuesta

8

respuesta corta es - no. ActiveDirectory es esencialmente una implementación de LDAP (con algunas extensiones de lujo, pero en esencia sigue siendo LDAP). Ni los protocolos LDAP ni las especificaciones tienen el concepto de transacciones, así que esto realmente no es posible.

Sería posible emular las transacciones en el lado del cliente, pero tendría que hacerlo usted mismo o usar Spring que, creo, lo hará por usted; obviamente, esto no es tan seguro como las transacciones del lado del servidor que esperaría de un DB. Una nota sobre Spring: no estoy del todo seguro de que Spring.NET soporte 'transacciones' para LDAP todavía, pero tienen algo así en la implementación de Java de Spring. Puede valer la pena mirar.

Al leer los documentos en el método CommitChanges, solo dice que envía los cambios al servidor; si no quiere decir que son seguros para las transacciones, supongo que no.

algunos pensamientos al azar - Me supongo sería posible que Microsoft podría añadir algo como esto en ActiveDirectory (ya que es más que simplemente LDAP) pero probablemente no si no tienen todavía.

+0

Finalmente tuve el tiempo y la oportunidad de hacer una pequeña prueba y AD no es transaccional. Sin embargo, no puedo encontrar ninguna documentación sobre Spring que ofrezca soporte de transacciones para recursos LDAP. ¿Estás seguro de que implementan esto? Cuando el recurso subyacente (Active Directory, por ejemplo) no reconoce las transacciones, la única opción que le queda es envolver la API (completa) del recurso con una API compatible con transacciones y responder correctamente a las confirmaciones y la reversión usted mismo. Realmente no importa si es Java (JNDI) o C# (System.DirectoryServices), pero esta es la única forma que conozco. –

+0

Echa un vistazo a esto: http://www.springsource.org/ldap No lo he usado, pero de eso es de lo que estaba hablando.Dice 'Spring LDAP proporciona soporte de transacciones', pero mi impresión es que es, como usted dice, un contenedor de toda la API de LDAP que realiza un seguimiento de las fallas, etc., e intenta deshacerse, reproducirse, etc. – macbutch

Cuestiones relacionadas