سؤال

أقوم بتطوير نموذج أمر سيد عبد الرقيق الذي يقوم به بعض التطبيقات "الرئيسية" أوامر إلى عمليات متجانسة تسمى "الرقيق" للقيام ببعض المهمة ثم الاستجابة مرة أخرى مع حالة كاملة أو فشل العملية. يجب عليهم أيضا أن يعرضوا بعض البيانات إلى سيد المتاحة عند الطلب.

كيف سيكون هذا النموذج يبدو في WCF؟

سيتقيم وكل مثيل من الرقيق استضاف الخدمات الخاصة؟ سوف سيد فقط المضيف؟ الرقيق فقط؟ يجب أن أستخدم عقود الاتصال؟ عقود البيانات؟ أو مجرد عقود الخدمة.

كملاحظة جانبية، هذا هو النطاق الترددي المنخفض، والكثافة المنخفضة، ومشروع التوزيع الداخلي فقط يستخدم لاختبار المنتج ويجب عدم اعتباره مشروع "كبير الطلب كبير".

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

المحلول

سيكون لديك بالتأكيد عقود الخدمة - يجب أن - في شكل أو شكل. هذا فقط يحدد خدمتك والعمليات (الأساليب) عليها (تشغيلي).

إذا كان نظام "خلف جدار الحماية" الداخلي، فيمكنك إلقاء نظرة على ملزمة دوبلكس، على سبيل المثال، اتصل بالميدان الرقيق، ويقدم تقرير الرقيق على قناة مزدوجة عند الانتهاء. خارج الصندوق، هناك فقط wsdualhttpgbinding لدعم الدوبلكس، ولكن نظرا لأنك داخلي، خلف جدار الحماية، قد ترغب في النظر في إنشاء ملزمة دوبلكس تستند إلى TCP (ليس بالأمر الصعب كما قد يبدو في أول!).

في هذا السيناريو، كل من التطبيقات المعنية حقا خادم وعميل في نفس الوقت.

سيكون لديك DataContacts بطريقة ما أو الشكل أو النموذج لتحديد البيانات التي يتم نقلها حولها بين الماجستير والعبد - لذلك مرة أخرى، نعم، سيكون عليك الحصول على عقود بيانات.

تحرير: بالطبع، قد يكون نهج آخر استخدام قوائم انتظار رسائل MSMQ؛ يسقط الرئيسي طلب "وظيفته" في قائمة انتظار، والتي يستمع الرقيق إلى طلب الوظيفة ويقتله. عندما يتم الرقيق، فإنه بدوره يسقط استجابة في قائمة انتظار الاستجابة التي يكون لها مستمع، ويتم إخطاره بالعمل الذي يتم القيام به بهذه الطريقة.

مارك

نصائح أخرى

وأنا أتفق مع جيريمي هنا .. ما تصفه لا يحتاج إلى تعقيد عقود رد الاتصال. يمكن أن تعرض العامل العامل ببساطة خدمة WCF (أو حتى خدمة الويب WSDL أو راحة على الويب لهذه المسألة ...) ثم ستحتاج وحدة التحكم ببساطة إلى معرفة عناوين URL من كل من العقد من الطفل وإرسال رسائل إلى عقد العمال.

إذا كنت تريد أن تكون وحدة التحكم قادرا على بث رسالة واحدة ولديها كل عامل (أنا حقا لا أحب القياس الرئيسي / الرقيق ... لقد تحولت منذ فترة طويلة إلى استدعاء تحكم / عامل) العمال القيام بشيء استجابة ونشر التقدم مرة أخرى إلى المجموعة، ثم قد ترغب في استخدام قناة P2P المتصورة في كثير من الأحيان متوفرة داخل WCF. يتيح ذلك لمجموعة من الخدمات المكتوبة في WCF للتحدث مع بعضها البعض مرة واحدة في وقت واحد كأدابير عناوين URL التي تستخدم تقريبا مثل فواصل الموضوع / المحادثة.

لذلك، على سبيل المثال، قد تصدر الأوامر على net.p2p: //abs / الأوامر قناة. فقط وحدة التحكم يرسل الأوامر على تلك القناة ولكن جميع العمال العامل تستمع. عندما يتم القيام به فعل شيءهم غير متزامن، يمكنهم الإبلاغ عن التقدم المحرز net.p2p: // labs / الحالة قناة. فائدة إضافية من هذا النهج هي أن (إذا كنت بحاجة إلى هذه الميزة)، فإن العمال الفرديين سيحصلون على القدرة على معرفة ما يفعله جميع العمال الآخرين.

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

للحصول على مرجع إضافي:منشور بلوق كتبته أثناء ظهره على قناة الأقران.

سيناريوهات قناة الأقران على MSDN - هذا جيد لأنه يمكنك الذهاب من هنا إلى مفاهيم قناة الأقران إلى الدليل المرجعي.

بلوق فريق قناة الأقران

إذا كانت معالجة الرقيق ستستغرق وقتا طويلا، فقد تكون عقود الاتصال بالترتيب. وإلا فيمكنك فقط حظر الماجستير في انتظار العبد لإكمال (قد تضطر إلى ضبط تكوين عميل WCF الخاص بك حتى لا يتمخر).

بناء على وصفك، أعتقد أنك تحتاج حقا فقط إلى استضافة خدمة WCF على عقد الرقيق وقد يكون السيد فقط عميل يستهلك خدمات WCF التي تعرضها العبيد.

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