نظرًا لأنني واجهت مشكلة معالجة المعاملات في خدمة الويب في المرة الأخيرة، فقد قمت بطريق الخطأ باكتشاف مثير للاهتمام حول إعداد قائمة سلسلة الاتصال الخاص بـ OracleConnection أثناء تصحيح أخطاء البرنامج.
لقد قرأت مقالًا من قبل، لكن لا أستطيع تذكر ما كان عليه. قالت المقالة إنه من الأفضل تعيين التجنيد على خطأ. في ذلك الوقت، لم أخوض في التفاصيل حول سبب تعيينه على خطأ برنامجي enlist=false تمت كتابته مباشرة. الآن فقط اكتشفت أن هناك علاقة دقيقة بين إعداد التجنيد ومعالجة المعاملات.
يستخدم مديرو المعاملات بشكل عام طريقتين للإدارة، إحداهما تسمى إدارة المعاملات خفيفة الوزن، ويشار إليها باسم LTM، والأخرى تسمى oleX TM. في مرحلة التقديم البسيطة، يتم استخدام LTM بشكل عام، بينما في معالجة المعاملات الموزعة، يتم استخدام 2PC بشكل عام، وبالتالي فإن الطريقة المستخدمة هي oleX TM.
إذا كانت قيمة enlist=false، فهذا يعني أن المعاملات اللاحقة لن يتم تسجيلها في المعاملة الحالية، وبالتالي لن تصبح المعاملة الحالية هي جذر المعاملة. إذا تم استخدام معالجة المعاملات الموزعة في البرنامج، فقد لا يتم تنفيذها بشكل صحيح (لم أختبر ذلك). في هذا الوقت، يطلب البرنامج من TM استخدام LTM للإدارة.
إذا كانت enlist=true، فإن العملية تخبر TM بأنها تحتاج إلى إدارتها باستخدام oleX TM وسيتم تمكين إدارة المعاملات الموزعة تلقائيًا في هذا الوقت، لذلك إذا تم تعيين enlist=true في سلسلة الاتصال، إذا تم استخدام قاعدة بيانات Oracle، ثم سوف الخلفية عند استدعاء oramts.dll، إذا لم يتم تثبيت MTS لخدمة Oracle في بيئة التطوير، فسوف يطالب ذلك oramts.dll لا يمكن العثور عليه. يمكنك تنزيل حزمة تثبيت هذه الخدمة من موقع Oracle على الويب. لا أعرف لماذا لا توفر Oracle حزمة تثبيت منفصلة، ولكنها تقوم بتنزيلها مجمعة مع odac.
ماذا سيحدث إذا لم تقم بتكوين التجنيد؟ يعتمد هذا على ما إذا كان برنامجك يستخدم المعاملات الموزعة أو معالجة المعاملات العامة. سوف تتفاعل TM تلقائيًا وفقًا لطلب البرنامج.
الخلاصة: لدى Enlist سيطرة معينة على تسجيل المعاملات. إذا كان وصفي خاطئًا، فيرجى مساعدتي في تصحيحي.
عنوان الرابط: http://yanrongpi.cnblogs.com/archive/2006/07/13/450189.html