سؤال

أرى مشكلة حيث أرسل رسائل كبيرة عبر wcf net.msmq باستخدام protobuf-net وأحصل على الخطأ التالي:

ألقى Formatter استثناء أثناء محاولته تخلص من الرسالة: خطأ في تفضيل هيئة طلب الطلب للتشغيل "DeliverData". العنصر النهائي "proto" من مساحة الاسم "http: // mynamespace' مُتوقع

إذا كان حجم الرسالة أقل من 16 ألفًا ، فهو يعمل

إذا قمت بإزالة protobuf-net ، فهو يعمل

إذا قمت بالتبديل إلى Basichttp ، فهو يعمل

ولكن إذا كان حجم الرسالة أكثر من 16 كيلو ، باستخدام protobuf-net ، عبر net.msmq ، أحصل على الخطأ. لقد قمت بتعيين MaxBufferPoolsize و MaxReceivedMessagesizages كبير بما فيه الكفاية ، فهو لا يساعد.

هل راى احد اخر هذا؟ هل استخدم أي شخص آخر protobuf-net + net.msmq لرسائل كبيرة وحصل عليه للعمل؟

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

المحلول

أعتذر عن التأخير - عطلة وما إلى ذلك ، لم أر مشكلة محددة في ذلك. حقيقة أنه ينادي "العنصر النهائي" يشير إلى أنه في طبقة XML في ذلك الوقت (وهو قبل Protobuf-Net هل حقا يتورط). هل لديك أي طريقة يمكنني إعادة إنتاج هذا بشكل موثوق؟


بعد التحقيق ، يبدو أن المشكلة هنا هي قارئ WCF ؛ يبدو أن الاستثناء قد ابتلعه MSMQ ، لذلك لم يكن واضحًا على الفور. يمكن إصلاح هذا في التكوين, ، أو في التعليمات البرمجية (إذا كنت تقوم بإعداد روابطك يدويًا) عن طريق الرجوع إلى system.runtime.serialization وزيادة الربط .ReaderQuotas.MaxArrayLength بشكل مناسب. القيمة القصوى المسموح بها 2147483647.

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