سؤال

أنا أكتب خدمة Windows التي تشد رسائل من MSMQ وظائف لهم إلى النظام القديم (باحت).إذا كان ما بعد فشل أو آلة يذهب إلى أسفل من خلال وظيفة, أنا لا تريد أن تفقد الرسالة.ولذلك فإنني باستخدام MSMQ المعاملات.لقد أجهض على الفشل ، وأنا لارتكاب على النجاح.

عند العمل ضد انتظار هذا الكود يعمل بشكل جيد.ولكن في الإنتاج سوف تريد فصل الجهاز (أو آلات) تشغيل الخدمة من الانتظار نفسها.عندما كنت اختبار ضد طابور بعيد ، وهو نظام.المراسلة.MessageQueueException يتم طرح:"الصفقة الاستخدام غير صالح."

يجب التحقق من أن الانتظار في السؤال هو المعاملات.

هنا هو الرمز الذي يتلقى من الانتظار:

// Begin a transaction.
_currentTransaction = new MessageQueueTransaction();
_currentTransaction.Begin();

Message message = queue.Receive(wait ? _queueTimeout : TimeSpan.Zero, _currentTransaction);
_logger.Info("Received a message on queue {0}: {1}.", queue.Path, message.Label);
WORK_ITEM item = (WORK_ITEM)message.Body;
return item;

الجواب

ومنذ ذلك الحين تحولت إلى SQL Service Broker.وهو يدعم البعيد المعاملات تتلقى بينما MSMQ 3.0 لا.و اضاف باعتبارها مكافأة, بالفعل يستخدم SQL Server المثيل الذي نحن مجموعة النسخ الاحتياطي.

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

المحلول

تركت تعليق يسأل عن إصدار MSMQ أنك تستخدم ، وأنا أعتقد أن هذا هو سبب المشكلة.المعاملات يتلقى لم يكن تنفيذها في الإصدارات السابقة من MSMQ.إذا كان هذا هو الحال, ثم هذا بلوق وظيفة يوضح الخيارات الخاصة بك.

نصائح أخرى

باستخدام TransactionScope أن العمل المقدمة MSDTC يعمل على الجهازين.

MessageQueue queue = new MessageQueue("myqueue");
using (TransactionScope tx = new TransactionScope()) {
    Message message = queue.Receive(MessageQueueTransactionType.Automatic);
    tx.Complete();
}

ومنذ ذلك الحين تحولت إلى SQL Service Broker.وهو يدعم البعيد المعاملات تتلقى بينما MSMQ 3.0 لا.و اضاف باعتبارها مكافأة, بالفعل يستخدم SQL Server المثيل الذي نحن مجموعة النسخ الاحتياطي.

من أجل استخدام المعاملات نطاق يجب قبل التحقق من أن MSDTC هو intalled بعد اتصال العميل تم تفعيلها.

تثبيت MSDTC ليست مشكلة ولكن تفعيل عن بعد اتصال العميل يجب أن يؤدي إلى إعادة تشغيل الملقم (على نظام التشغيل windows server 2003 هذا هو الحال).

ربما هذا المنصب يمكن أن تساعدك :كيفية تفعيل MSDTC بعد اتصال العميل

Aviod باستخدام بعيد MSMQ( آخر الترقية إلى MSMQ 4.0 الدعم عن بعد MSMQ الصفقة).1) بدلا من ذلك يمكنك إنشاء خدمة ويب لدفع الرسائل 2) إنشاء المحلية MSMQ على الصفقة الغرض 3) إنشاء الأداة الصغيرة التي لديها حزمة(دفعة) عدد messagenumbers...مرة واحدة دفعة فشل حذف الرسائل في هدف آخر جعل هذه الصفقة نطاق

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