17 Stimmen

Ist Active Directory transaktionsfähig?

Eine einfache Frage, aber ich kann die Antwort nirgendwo finden: Ist Active Directory transaktionsfähig?

Mit anderen Worten, wird die folgende Änderung rückgängig gemacht (da ich scope.Complete() nicht aufgerufen habe):

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

Wenn nicht, ist es möglich, dies irgendwie zu aktivieren? Im Moment habe ich Code, der Datenbankupdates und entsprechende AD-Updates durchführt, und ich habe Kompensationslogik für die AD-Updates, falls sie aus irgendeinem Grund fehlschlagen. Diese Lösung ist weit entfernt von optimal.

Mit freundlichen Grüßen, Ronald Wildenberg

0 Stimmen

Warum kannst du es nicht selbst testen? Ich kann keine klaren Dokumentationen dazu finden, ob AD transaktionsfähig ist - ich würde denken (und hoffen!), dass es so ist! LDAP im Allgemeinen scheint transaktionsfähig zu sein, zumindest.

0 Stimmen

Im Moment arbeite ich an einer Maschine, die nicht in eine Domäne eingeschlossen ist... Das sollte heute behoben werden, dann führe ich einige Tests durch. Es ist jedoch seltsam, dass es anscheinend keine Dokumentation zu diesem Thema gibt.

11voto

macbutch Punkte 3133

Kurze Antwort - nein. ActiveDirectory ist im Grunde eine LDAP-Implementierung (mit einigen ausgefallenen Erweiterungen, aber im Kern ist es immer noch LDAP). Weder die LDAP-Protokolle noch die Spezifikationen haben das Konzept von Transaktionen, also ist dies wirklich nicht möglich.

Es wäre möglich, Transaktionen auf der Client-Seite zu emulieren, aber das müsstest du selbst tun oder Spring verwenden, das meiner Meinung nach das für dich tun wird - offensichtlich ist dies nicht so sicher wie serverseitige Transaktionen, die du von einer Datenbank erwarten würdest. Eine Anmerkung zu Spring - ich bin mir nicht ganz sicher, ob Spring.NET bereits "Transaktionen" für LDAP unterstützt, aber in der Java-Implementierung von Spring haben sie so etwas Ähnliches. Es könnte sich lohnen, einen Blick darauf zu werfen.

Beim Lesen der Dokumentation zur CommitChanges-Methode heißt es einfach, dass sie Ihre Änderungen an den Server sendet - wenn nicht explizit darauf hingewiesen wird, dass sie transaktionssicher sind, würde ich davon ausgehen, dass sie es nicht sind.

Einige zufällige Gedanken - Ich vermute, dass es möglich wäre, dass Microsoft so etwas zu ActiveDirectory hinzufügen könnte (da es mehr als nur LDAP ist), aber wenn sie es bis jetzt nicht getan haben, werden sie es wahrscheinlich nicht tun.

0 Stimmen

Ich hatte endlich Zeit und Gelegenheit, einen kleinen Test zu machen und AD ist nicht transaktional. Ich kann jedoch keine Dokumentation finden, dass Spring Transaktionsunterstützung für LDAP-Ressourcen bietet. Sind Sie sicher, dass sie dies implementieren? Wenn die zugrunde liegende Ressource (zum Beispiel Active Directory) nicht transaktionsfähig ist, bleibt Ihnen nur die Möglichkeit, die (gesamte) API der Ressource mit einer transaktionsfähigen API zu umhüllen und auf Commits und Rollbacks selbst korrekt zu reagieren. Es spielt keine Rolle, ob es sich um Java (JNDI) oder C# (System.DirectoryServices) handelt, aber dies ist der einzige Weg, den ich kenne.

0 Stimmen

Schau dir das an: springsource.org/ldap Ich habe es selbst nicht benutzt, aber das ist worüber ich gesprochen habe. Es heißt 'Spring LDAP bietet Transaktionsunterstützung', aber mein Eindruck ist, dass es, wie du sagst, ein Wrapper über die gesamte LDAP-API ist, der Fehler festhält und versucht zurückzusetzen, neu abzuspielen usw.

1voto

joe.finsterwald Punkte 46

Nein. LDAP unterstützt Transaktionen nicht direkt, jedoch ist es möglich, eine eigene Lösung zu implementieren, indem man eine Enlistment-Klasse schreibt, die das IEnlistmentNotification-Interface implementiert. IEnlistmentNotification funktioniert sowohl mit expliziten als auch impliziten Transaktionen im System.Transactions-Namespace.

Sie finden weitere Dokumentationen (und ein Beispiel) hier: https://msdn.microsoft.com/en-us/library/system.transactions.ienlistmentnotification(v=vs.110).aspx

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X