اتصال المقبس WCF غير مغلق باستخدام ضغط WS مع Net.TCP Binding

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

سؤال

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

بعد بعض الأبحاث، وجدت تنفيذ متاح عبر الإنترنت من http://weblogs.asp.net/cibrax/archive/2006/03/29/ws_2d00_compression-for-wcf.aspx '>http://weblogs.asp.net/cibrax/archive/2006/03/29/ws_2d00_compression-for-wcf.aspx., ، قام مؤلفوها بإنشاء عنصر ملزم جديد "إلغاء ضغط"، المرتبط بفئات قنواته ذات الصلة.

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

بمجرد أن جربته عبر Net.TCP ملزمة (ملزمة مخصصة باستخدام TCP Transport)، لا يزال التطبيق يعمل بشكل جيد. ومع ذلك، عندما راجعتها من قبل بعض أدوات التتبع، وجدت شيئا غريبا.

قمت باختبار الوحدة عن طريق الاتصال ب 10 مرات على الطريقة، والتي أنشأ العميل عن طريق ChannelFactory، وأضاف صراحة جميع العناصر الملزمة، بما في ذلك عنصر ربط الضغط. عندما قمت أولا بتحقق من الاستجابة في TCPTrace، فوجئت برؤية أن كل هذه الرسائل العشرة مجتمعة في طلب واحد.

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

حدثت المشكلة فقط في صافي TCP ملزمة بعنصر ملزم ضغط، إذا لم تتم إضافة العنصر إلى ربط أو في HTTP Binding كل شيء يبدو جيدا.

هل حاول أي شخص هذا الحل ونرى نفس المشكلة من قبل؟ هل هناك أي شيء آخر يمكنني القيام به لإجبار الاتصال بالإغلاق؟ هل يمكن أن فاتني أي شيء؟

شكرا جزيلا، توني

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

المحلول

يبدو أن Microsoft لديها الآن مقالة رسمية حول تشفير الضغط:http://msdn.microsoft.com/en-us/library/ms751458(V=VS.90).aspx.

اختبرت ذلك ويبدو أن المشكلة قد ولت. ليس من السهل إجراء اختبار وحدتي بعد ذلك عدة أيام :)

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