مشكلة خدمة WCF عندما يكون لدى العميل عناوين IP متعددة

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

  •  20-09-2019
  •  | 
  •  

سؤال

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

ما أحاول القيام به في حالة الاختبار الخاصة بي:

  1. يستضيف الخادم خدمة WSDualHttpBinding
  2. ينشئ العميل اتصالاً (طريقة تسجيل المكالمات) بهذا من خلال توفير عنوان uri الخاص برد الاتصال والذي يحتوي على عنوان IP الخاص بالعميل
  3. بمجرد إنشاء الاتصال، يتم تشغيل صفحة ويب بواسطة تطبيق العميل.يقوم المستخدم بكتابة بعض النص في مربع النص ثم ينقر فوق إرسال.ترسل صفحة الويب النص إلى جميع عملاء سطح المكتب المسجلين.

مشكلة:

في الخطوة 2، قد يكون لجهاز الكمبيوتر عناوين IP متعددة (محول إيثرنت، ومحولات الاسترجاع، وما إلى ذلك).إذا تم إرسال عنوان IP من هذه القائمة أثناء مكالمة التسجيل في عنوان URL لرد الاتصال والذي لا يمكن استدعاؤه مرة أخرى من الخادم (على سبيل المثال.محول الاسترجاع IP)، يتم طرح استثناء المهلة.بعد عدة محاولات من هذا القبيل، لا يمكن للخادم قبول المكالمات من العملاء بعد الآن (سواء كان عنوان IP صالحًا أو غير ذلك).في بعض الأحيان تم طرح استثناء "الخادم مشغول جدًا".

(لا يمكنني استخدام الاسم المؤهل بالكامل للجهاز في معرف الموارد المنتظم (URI) لرد الاتصال بسبب مشكلات تكوين DNS/WINS التي تتسبب في عدم قيام الخادم بتحليل اسم الجهاز إلى عنوان IP الصحيح).

كيفية التكاثر:
أ.نشر الخادم على IIS.من جهاز مختلف بعناوين IP متعددة، قم بتنفيذ العميل.يلقي العميل استثناءات المهلة ويخرج البرنامج بعد 3 محاولات ب.تسمح المعلمة الموجودة في App.Config للشخص بكتابة عنوان IP الصحيح (IP المراد استخدامه).الآن إذا تم إطلاق البرنامج، كل شيء يعمل بشكل جيد.
ج.إذا قمت بإزالة عنوان IP المحدد أعلاه بحيث يتم استخدام عنوان IP غير صحيح، فستحدث الخطوة مرة أخرى.قم بتشغيل البرامج 2-3 مرات في هذا الوضع.
د.قم بإجراء التغييرات كما في الخطوة ب وقم بتشغيل البرنامج.أحيانًا أحصل على استثناء للمهلة.وفي أحيان أخرى، يظهر موقع الويب.ومع ذلك، عند إدخال النص وإرساله، فإنه لا يصل إلى العميل.(عملت طريقة التسجيل على الرغم من أن خدمة الويب لم تتلق أي مكالمة.فشلت وظيفة الإرسال نظرًا لعدم وجود عملاء مسجلين في خدمة الويب.

لست متأكدًا من سبب حدوث ذلك بالضبط وكيفية معالجته.هذا هو حل Visual Studio الخاص بي - http://bit.ly/atKfOS

نقدر بشدة أي مدخلات أو تعليقات.بيئة:الخادم - Windows XP (IIS 5)، Windows Server 2008 SP2 x64 (IIS 7)، العميل:ويندوز إكس بي

شكرا GC

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

المحلول

حسنًا، أعتقد أن المشكلة الرئيسية هي:عندما يحاول الخادم معاودة الاتصال بالعميل ويفشل، ستصبح القناة بين الاثنين "معيبة" وتصبح عديمة الفائدة.

بعد حدوث مثل هذا الحدث، يجب عليك التخلص من الوكيل من جانب العميل وإعادة إنشائه - أو التعامل مع استثناء المهلة على الخادم بأمان (التقطه، أو حوله إلى خطأ SOAP، أو سجله - أيًا كان - فقط لا تدع يقوم .NET TimeoutException الذي لم تتم تصفيته بتمريره مرة أخرى إلى العميل، مما يؤدي إلى حدوث خطأ في القناة).

ماذا تفعل على جانب الخادم الخاص بك عندما يحدث مثل هذا TimeoutException؟هل تتأكد من عدم ظهور هذا الاستثناء على طول الطريق حتى القناة؟؟

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