سؤال

لدي خدمة تسجيل WCF تعمل تعمل عبر MSMQ. يتم تسجيل العناصر إلى قاعدة بيانات SQL Server 2005. كل وظائف بشكل صحيح إذا تم استخدامها خارج المعاملات. عند استخدامها داخل مثيل المعاملات، تتسبب المكالمة دائما في إحباط المعاملة. رسالة = "لقد تم إحباط المعاملة".

ما الذي يجب علي فعله للحصول على هذه الدعوة للعمل داخل الصفقة؟ هل هو ممكن. لقد قرأت أنه بالنسبة لمعاملة العميل للتدفق عبر حدود الخدمة يجب أن تدعم الربط تدفق المعاملات، والتي تحد على الفور من الارتباطات فقط NetNamedPipeIpeDing، Nettcpbinding، Wshttpbinding، WSDualhttpginding و WsfederationhttpGinding.

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

المحلول

أنا لست على دراية بالقلق حول MSMQ، ولكن هناك سلسلة منشورات جيدة حقا من قبل توم هولاندر MSMQ، IIS و WCF: الحصول عليها للعب بشكل جيد - في الجزء 3 الذي قدم الرابط محادثات توم حول الحصول على المعاملات.

MSMQ يمكن أن تكون المعاملات - أم لا. وفي WCF، يمكنك تزيين كل من عقد الخدمة وكذلك عقود التشغيل الفردية (الأساليب) مع السمات ذات الصلة بالمعاملات، مثل ما إذا كنت تريد السماح أو عدم السماح أو تتطلب سياق معاملة.

بقدر ما أفهم، في الإعداد الخاص بك، لا تريد أن تكون جزء MSMQ للمعاملات - ولكن يجب أن تكون قادرا على استخدامه حتى إذا كانت المعاملة المحيطة موجودة. في هذه الحالة، تحتاج إلى إضافة TransactionFlow = "المسموح به" لعقد التشغيل الخاص بك مثل هذا:

[ServiceContract]
public interface ILoggingService
{
  [OperationContract]
  [TransactionFlow(TransactionFlowOption.Allowed)]
  void LogData(......);
}

يجب أن تفعل ذلك!

مارك

نصائح أخرى

آسف للسؤال الذي لا داعي له ...

لقد حل مشكلتي. كنت بحاجة إلى المكان

[TransactionFlow(TransactionFlowOption.Allowed)]

على العملية في عقد الخدمة ثم

[OperationBehavior(TransactionScopeRequired=true)] 

حول تنفيذ العقد (الخدمة نفسها).

يعمل علاج.

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