سؤال

ربما هذا سؤال واضح، ربما ليس كذلك. تخيل تطبيق مراقبة واجهة المستخدم الرسومية حيث يدعو كل زر زر إلى وظيفة مختلفة على خدمة WCF عن بعد. استخدام الزر متكرر في كل بضع ثوان تقريبا. بشكل عام هو الأفضل لفتح وإغلاق قناة WCF كل وظيفة وظيفة أو تعليق القناة مفتوحة لمدى عمر التطبيق؟ على افتراض بالطبع أن هناك سوى بضع مثيل على هذا التطبيق.

ملحوظة هذا السؤال ليس حقا عن المثال، ولكن في مساعدتي في الحصول على رأسي حول أفضل الممارسات هنا.

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

المحلول

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

نصائح أخرى

إذا كان بإمكانك تدخر نفسك من الاضطرار إلى إعادة إنشاء وكيل العميل قبل كل مكالمة، فمن الأفضل أن يكون مفيدا لأدائك.

لكن: القيام بذلك، يجب عليك التأكد من التعامل مع جميع الاستثناءات على جانب الخادم بشكل صحيح (ربما عن طريق تنفيذ IErrorHandler واجهة في خدمتك) وتحولت إلى أخطاء الصابون، والتي يمكن نقلها مرة أخرى إلى العميل دون خلط القناة.

إذا كان استثناء واحد يفرك، وترسل إلى العميل باعتباره استثناء "منتظم"، فإن القناة (رابط الاتصال بين عميلك وخادمك) ستكون أخطأ -> أي المقدمة عديمة الفائدة.

في مثل هذه الحالة، تحتاج إلى التحقق أولا من هذه الحالة (القناة لديها .State خاصية)، وإذا كنت تواجه قناة مختمة، لا يوجد شيء يمكنك القيام به باستثناء إعادة إنشاء وكيل العميل مرة أخرى قبل استدعاء الأساليب عليها.

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