2010-08-16 8 views
5

Estoy construyendo un codificador personalizado que comprime las respuestas WCF. Se basa en el codificador Gzip en muestras WCF de Microsoft y esta entrada del blog:Cómo determinar el tamaño del mensaje WCF en el nivel del codificador

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

Tengo todo de trabajo, pero ahora me gustaría aplicar la compresión sólo si la respuesta está más allá de un cierto tamaño, pero no estoy seguro de cómo recuperar el tamaño total del mensaje real desde el nivel del codificador.

Necesitaría obtener el tamaño del mensaje tanto en el método WriteMessage (...) en EncoderFactory, así sé si comprimir el mensaje) como en el método BeforeSendReply (...) en el DispatchMessageInspector para que Puedo agregar el encabezado ContentEncoding "gzip" a la respuesta. Las solicitudes son siempre pequeñas y no están comprimidas, así que no tengo que preocuparme por eso.

Cualquier ayuda apreciada.

Jon.

Respuesta

0

Usted puede intentar calcularlo basa en reply.ToString.Length() y message.ToString.Length()

+0

Gracias por responder, pero tanto la respuesta como el mensaje son objetos de referencia en ese momento (estoy usando un codificador interno personalizado), así que no puedo obtener la longitud de esa manera. Si profundizo en el objeto, puedo obtener el contenido real, que sigue siendo un objeto de referencia. No estoy seguro de cómo obtener los datos en bruto serializados antes de enviarlos. – user250837

2

Creo que podría hacer esto en dos etapas. Primero, escriba un MessageEncoder personalizado que codifique el mensaje a un byte[] simplemente normal. Una vez que tenga el byte-array codificado (y este puede ser cualquier formato de codificación de mensaje ... Xml, Json, binario, lo que sea) puede examinar el tamaño del conjunto de bytes y determinar si desea crear otro conjunto de bytes comprimido.

varios recursos que pueden ser útiles:

Cuestiones relacionadas