WCF - اطلب من العميل التحقق من توفر الخدمة [نسخة مكررة]

StackOverflow https://stackoverflow.com/questions/1234427

  •  22-07-2019
  •  | 
  •  

سؤال

هذا السؤال لديه بالفعل إجابة هنا:

لدي نظام خادم عميل، وقد كتبت كلا الجانبين بواسطتي، وأرغب في وضع العملاء في حالة "غير متصلين بالإنترنت" عندما ينقطع اتصال/يتوقف الخادم، ثم يتم إعادتهم تلقائيًا "متصلين" عندما يكون الخادم متاحًا مرة أخرى .

بالنسبة للجزء الأول، أستمع إلى الأحداث الخاطئة في القناة وأتعامل مع ذلك عن طريق ضبط العميل على وضع عدم الاتصال.أبدأ بعد ذلك في الاتصال بخدمة "ping" على الخادم (كل 30 ثانية) والتي تقوم فقط بإرجاع منطقي إذا كان على قيد الحياة.بمجرد أن يصبح على قيد الحياة، يحصل العميل على المنطق ويعود إلى الاتصال بالإنترنت.

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

سؤالي هو كيف يمكنني التعامل مع خدمة ping بشكل أكثر رشاقة؟من الناحية المثالية، أرغب في الاتصال بشكل دوري بخدمة تتيح لي معرفة ما إذا كانت متصلة بالإنترنت، وتسمح لي على الفور بمعرفة ما إذا كانت غير متصلة بالإنترنت.

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

المحلول

ماذا عن هذا:

  • إذا اكتشفت انقطاع اتصال الخادم، فادخل إلى وضع "Ping".
  • في "وضع ping"، يمكنك ضبط "sendTimeout" الخاص بالعميل على شيء قصير جدًا، على سبيل المثال.حوالي ثانيتين أو نحو ذلك، نظرًا لأنه يجب الرد على مكالمتك بطريقة Ping الخاصة بالخدمة على الفور تقريبًا
  • بمجرد عمل "Ping" بنجاح، يمكنك إعادة إنشاء وكيل العميل مرة أخرى وتعيين "sendTimeout" الخاص بالعميل مرة أخرى إلى القيمة الأصلية (الافتراضي هو دقيقة واحدة - يعتمد على ما يناسبك، 15 ثانية، 30 ثانية - أيًا كان)

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

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