سؤال

كيف يمكنني التحقق بشكل موثوق من أن MSDTC قد روجت لمعاملة إلى معاملة موزعة؟

هذا هو عند استخدام المعاملات في .NET.

حاليًا يقوم زميل في العمل باختبار هذا عن طريق إيقاف المنسق على جهازه - إذا تم إلقاء استثناء ، يتم اعتبار ذلك كدليل على حدوث محاولة للترويج للمعاملة. هل هذا اختبار صالح؟

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

المحلول

أعتقد أن الاختبار الخاص بك على ما يرام على الرغم من أنه يجب عليك التأكد من حصولك على استثناء DTC وليس استثناءًا آخر.

بعض الأشياء الأخرى التي يمكنك القيام بها:

  • يمكنك أيضًا تشغيل SQL Profiler وتحت Trace DTCtransaction.

  • من حيث الكود ، يمكنك التعامل مع DistributedTransactionStarted الحدث وتسجيل رسالة عند بدء معاملة موزعة.

  • أو يمكنك فقط إضافة رسائل السجل لتسجيل الدخول System.Transactions.Transaction.Current. TransactionInformation.DistributedIdentifier قبل نهاية المعاملة. إذا كانت القيمة هي Guid.Empty {00000000-0000-0000-0000-000000000000} ، فهي ليست معاملة موزعة وإلا فقد تم الترويج للمعاملة إلى معاملة موزعة.

قلت إنك تستخدم SQL Server 2008. ما هو إصدار .NET الذي تستخدمه؟ هل هو 3.5؟ إذا كنت تستخدم SQL Server 2008 و .NET 3.5 بعد ذلك ، يجب أن تكون قادرًا على فتح اتصالات متعددة (باستخدام نفس سلسلة الاتصال) إلى نفس قاعدة البيانات في نفس المعاملة دون تصعيد إلى معاملة موزعة. لكي تعمل هذا ، تحتاج إلى إغلاق الاتصال الأول قبل فتح اتصال ثانٍ.

إذا بدا أن جميع الشروط قد تم استيفاءها وأن المعاملات لا تزال تتصاعد ، فسأود:

  • تحقق مرتين من مستوى توافق خادم SQL
  • تحقق من سلسلة الاتصال لمعرفة ما إذا تم تعطيل التجميع
  • تحقق لترى أنه لا يتم فتح اتصالين في نفس الوقت في معاملة واحدة
  • تعرف على ما إذا كانت جميع المعاملات يتم الترويج لها أو فقط في سيناريوهات معينة

تحديث: ال منسق المعاملات الموزعة (MSDTC) والأسئلة الشائعة للمعاملات يجمع قائمة رائعة من موارد MSDTC.

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