سؤال

أنظر أيضا كيف يقوم خادم WCF بإبلاغ عميل WCF بالتغييرات؟(حل أفضل ثم الاقتراع البسيط ، على سبيل المثالتعليق أو استطلاع طويل)

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

متطلبات:

  • صندوق رأس المال العامل
  • يتصل العملاء بالخادم من خلال منفذ TCP 80 (netTcpBinding).
  • يقوم الخادم بإرجاع المعلومات على فترات غير منتظمة (من دقيقة واحدة إلى عدة ساعات).
  • لا يجب على المستخدمين تكوين جدران الحماية الخاصة بهم، بل يجب أن تمر عمليات دفع الخادم عبر جدران الحماية التي أغلقت جميع المنافذ الواردة.يلزم وجود TCP duplex على نفس الاتصال لهذا الغرض، ولا يعمل الربط المزدوج نظرًا لأنه يجب فتح منفذ على جدار حماية العميل.
  • يرسل العملاء نبضات القلب إلى الخادم على فترات منتظمة (ربما كل 15 دقيقة) حتى يعرف الخادم أن العميل لا يزال على قيد الحياة.
  • الخادم هو IIS7 مع WAS.

يبدو أن الحل هو netTcpBinding المزدوج.وبناء على هذه المعلومات:

WCF من خلال جدران الحماية وNATs

إبقاء الاتصالات مفتوحة في IIS

ولكن لم أجد بعد نموذج التعليمات البرمجية الذي يعمل ..لقد حاولت الجمع بين عينات "Duplex" و"TcpActivation" من نماذج WCF من Microsoft دون أي حظ.من فضلك، هل يمكن لأي شخص أن يوجهني إلى نموذج التعليمات البرمجية الذي يعمل، أو إنشاء نموذج صغير للتطبيق.شكرًا جزيلاً!

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

المحلول

لقد وجدت بضعة حلول:

زيرو سي آيس GPL مع خيار تجاري.لقد تم اختبارها بسرعة فقط.يبدو أقوى من .NET Remoteing ويتم تطويره بنشاط كبير.

كائنات Rem يدعم التطوير التجاري النشط كل شيء، ولكن لا يبدو أنه يحتوي على جميع الميزات المتقدمة التي تستخدمها القنوات الأصلية.

قنوات حقيقية.إنه يستخدم التحكم عن بعد مع الكثير من الميزات المضافة الرائعة، وأهمها أنه يعمل من خلال NATs دون الحاجة إلى فتح جدار حماية العميل.لسوء الحظ يبدو أن ميتا جدا.

الحل الآخر هو استخدام الدفق مع IIS، وفقًا لهذه المقالة: إبقاء الاتصالات مفتوحة في IIS

يقوم العميل بإجراء الاتصال الأول (http مع IIS6، tcp مع IIS7) بالخادم عند المنفذ 80، ثم يظل الاتصال مفتوحًا مع استجابة متدفقة لا تنتهي أبدًا.

لم يكن لدي الوقت الكافي لتجربة ذلك، ولم أجد نموذجًا يقول إنه يحل مشكلة جدار الحماية على وجه التحديد، ولكن إليك نموذجًا ممتازًا ربما يعمل: تدفق XML.

نصائح أخرى

هل حاولت النظر إلى: http://www.codeproject.com/KB/WCF/WCF_Duplex_UI_Threads.aspx

هل يمكنك تقديم أمثلة على ما حاولت بالفعل؟مع تفاصيل جدران الحماية وغيرها، رسائل الخطأ؟

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

في معظم إعدادات جدار الحماية، سيتم قطع اتصال TCP بواسطة جدار الحماية إذا كان خاملاً للحفاظ على الموارد.ربما لا تكون مهلة الخمول شيئًا يمكنك التحكم فيه.سوف يقوم البعض بتمزيقها إذا كانت في وضع الخمول وتم الوصول إلى حد الموارد.

لن تسمح معظم بيئات الشركة لأي جهاز بإجراء اتصال TCP صادر على أي حال.

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

إذا كان عليك دفع البيانات في الوقت المناسب، في أقل من الثانية (أيالخدمات المالية)، ثم فكر في بعض البنية التحتية للمراسلة مثل موزع NServiceBus من جانب العميل، ولكن ذلك سيتطلب تثبيت العميل...

فهل حاولت استخدام Toredo؟بعد أن قرأت أنه سيظهر هناك، فمن المحتمل أن يكون إعداده معقدًا للغاية بالنسبة للمستخدم.

لم أجرب السيناريو الذي تتحدث عنه لذا لا يمكنني تقديم الكثير من المساعدة، آسف.إذا كان كل ما تحتاج إلى تجاوزه هو جدار حماية العميل، فقد ترغب في التحقق منه هذا المشنور.

حظ سعيد.

هل حاولت هذا واحد؟دوبلكسHttpBinding

إنها تستخدم تقنية الاقتراع الذكية المغلفة بربط WCF مخصص.لذلك يجب أن تعمل خارج الصندوق.

يمكنك إجراء التغيير التالي في العميل للوصول إلى خدمة الويب المزدوجة على العميل الممكّن لجدار الحماية.

  • قم بتعيين خيار WebHttp محددًا في جدار الحماية -> خيارات متقدمة -> الإعدادات (إعداد اتصال الشبكة) -> خادم الويب (Http)
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top