Как определить размер сообщения WCF на уровне кодера - PullRequest
5 голосов
/ 16 августа 2010

Я создаю пользовательский кодер, который сжимает ответы WCF. Он основан на кодировщике Gzip в примерах Microsoft WCF и в этом блоге:

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

У меня все это работает, но теперь я хотел бы применить сжатие, только если ответ превышает определенный размер, но я не уверен, как извлечь общий размер фактического сообщения с уровня кодировщика.

Мне нужно было бы получить размер сообщения как в методе WriteMessage (...) в EncoderFactory, поэтому я знаю, нужно ли сжимать сообщение), так и в методе BeforeSendReply (...) в DispatchMessageInspector, чтобы я мог Можно добавить заголовок «gzip» ContentEncoding к ответу. Запросы всегда маленькие и не сжимаются, поэтому мне не нужно об этом беспокоиться.

Любая помощь приветствуется.

Jon.

Ответы [ 2 ]

3 голосов
/ 14 октября 2010

Я думаю, вы бы сделали это в два этапа. Сначала напишите собственный MessageEncoder, который кодирует сообщение в byte[] просто нормально. Если у вас есть закодированный байтовый массив (и это может быть любой формат кодирования сообщений ... Xml, Json, двоичный и т. Д.), Вы можете проверить размер байтового массива и определить, хотите ли вы создать другой сжатый байтовый массив. *

Несколько ресурсов, которые вы можете найти полезными:

0 голосов
/ 17 августа 2010

Вы можете попробовать рассчитать его на основе reply.ToString.Length() и message.ToString.Length()

...