2010-08-16 22 views
5

WCF yanıtlarını sıkıştıran özel bir kodlayıcı yapıyorum. Bu Microsoft'un WCF örneklerinde Gzip kodlayıcı Bu blog yayınında dayanmaktadır: Ben her çalışma varEnkoder düzeyindeki WCF mesaj boyutu nasıl belirlenir

http://frenk.wordpress.com/2009/12/04/gzip-compression-wcfsilverlight/

ama şimdi cevap belli ötesinde olması durumunda ben sıkıştırma uygulamak istiyorum boyut, ancak gerçek mesajın toplam boyutunu enkoder seviyesinden nasıl alacağımı bilmiyorum.

İleti boyutunu EncoderFactory'deki WriteMessage (...) yönteminde almalıyım, bu yüzden iletiyi sıkıştırıp sıkıştırmamayı biliyorum) ve DispatchMessageInspector'daki BeforeSendReply (...) yöntemini kullanmam gerekir. Yanıt için "gzip" ContentEncoding üstbilgisini ekleyebilirim. İstekler her zaman küçüktür ve sıkıştırılmaz, bu yüzden endişelenmenize gerek yok.

Herhangi bir yardım için teşekkür ederiz.

Jon.

cevap

0

Sen seni iki aşamada bu yapacağını düşünüyorum reply.ToString.Length() ve message.ToString.Length()

+0

Yanıtladığınız için teşekkürler, ancak hem yanıt hem de ileti bu noktada referans nesnelerdir (özel bir dahili kodlayıcı kullanıyorum), bu nedenle uzunluğu o kadar alamıyorum. Nesneyi incelersem, hala referans nesnesi olan gerçek içeriği alabilirim. Gönderilmeden önce seri hale getirilmiş ham verilerin nasıl ele alınacağından emin değilim. – user250837

2

dayalı hesaplama deneyebilirsiniz. Öncelikle, mesajı normal olarak byte[] kodlayan özel bir MessageEncoder yazın. Kodlanmış bayt dizisine sahip olduğunuzda (ve bu, Xml, Json, binary, neyse) herhangi bir ileti kodlama formatına sahip olduktan sonra bayt dizisi boyutunu inceleyebilir ve başka bir sıkıştırılmış bayt dizisi oluşturmak isteyip istemediğinizi belirleyebilirsiniz. yararlı olabilecek

Çeşitli kaynaklar: