سؤال

سؤال بسيط لكن لا يمكنني العثور على الإجابة في أي مكان: هل أدرك معاملة Active Directory؟

بمعنى آخر، هل سيتم التراجع عن التغيير التالي (لأنني لم اتصل scope.Complete()):

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

إن لم يكن، هل من الممكن تمكين هذا بطريقة أو بأخرى؟ في الوقت الحالي، لدي رمز يقوم بتنفيذ تحديثات قاعدة البيانات وتحديثات الإعلانات المقابلة ولدي تعويض منطق التحديثات الإعلانية إذا فشلت بطريقة أو بأخرى. هذا الحل بعيد عن الأمثل.

تحياتي، رونالد وايلدينبرغ

هل كانت مفيدة؟

المحلول

إجابة قصيرة هي - لا. يعد ActiveDirectory في الأساس تنفيذ LDAP (مع بعض الملحقات الفاخرة ولكن في قلبه لا يزال LDAP). لا تحتوي بروتوكولات LDAP ولا المواصفات على مفهوم المعاملات، لذلك هذا غير ممكن حقا.

سيكون من الممكن محاكاة المعاملات على جانب العميل ولكن عليك أن تفعل ذلك بنفسك أو استخدام الربيع الذي، وأعتقد أنه سيفعل ذلك من أجلك - من الواضح أن هذا ليس آمنا بالمعاملات الجانبية للخادم التي تتوقعها من DB. ملاحظة في الربيع - لست متأكدا تماما من أن SPRING.NET يدعم "المعاملات" ل LDAP حتى الآن ولكن لديهم شيء من هذا القبيل في تنفيذ Java لربيع الربيع. قد يكون من المفيد إلقاء نظرة.

من قراءة المستندات في طريقة Commitchanges، تقول فقط إنها ترسل التغييرات الخاصة بك إلى الخادم - إذا لم تقدم نقطة قول إنها آمنة معاملة وأود أن أفترض أنها ليست كذلك.

بعض الأفكار العشوائية - أنا خمن سيكون من الممكن أن تقوم Microsoft بإضافة شيء من هذا القبيل إلى ActiveDirectory (كما هو أكثر من فقط LDAP) لكنهم ربما لن يفعلوا ذلك إذا لم يفعلوا بعد.

نصائح أخرى

لا. لا تدعم LDAP المعاملات مباشرة، ومع ذلك، من الممكن "لفة حلك" عن طريق كتابة فئة تجنيد تنفذ واجهة IENListmentNotification. يعمل ienlistmentNotification مع المعاملات الصريحة والمنامية في نظام Names.Transactions.

يمكنك العثور على مزيد من الوثائق (ومثال) هنا: https://msdn.microsoft.com/en-us/library/system.transactions.ienlistmentnotification(V=VS.110).aspx.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top