2013-07-01 4 views
2

Я только что узнал, что сжатие было добавлено в WCF, поддерживая Deflate и GZip схемы сжатия. Документация кажется очень расплывчатой ​​в деталях операции.Сжатие потока WCF - Является ли оно адаптивным?

Мне было интересно, если у кого-то есть подробная информация о том, как работает сжатие.

Делается это на основе каждого сообщения (каждое сообщение обрабатывается и сжимается независимо от предыдущих сообщений?) Или, возможно, это делается (или может быть сконфигурирован) в адаптивной моды? (следующего сообщение использует сжимаемость информации, полученной от предыдущих?)

В основном я хотел бы знать, если включить эту новую функцию сжатия может принести пользу болтливого приложения, которое передает небольшие куски данных в реальное время, что является как известно, ОЧЕНЬ сжимаемый, если сгруппирован, но сжимает ОЧЕНЬ плохо, если обрабатывается изолированно. К сожалению, ограничение в режиме реального времени не позволяет группировать несколько сообщений, чтобы помочь процессу сжатия.

ответ

1

Нет

WCF Сжатие осуществляется с помощью пользовательских сообщений кодировщика. Это в основном та же концепция позади Gzip Message Encoder, включенная в образцы WCF.

Вы можете посмотреть на System.ServiceModel.Channels.MessageEncoder. В основном, большинство операций кодирования происходит в методах чтения/записи (Streaming/Message, Async/Sync, ...). Существует очень специфическая оптимизация для сеанса, но я не думаю, что это вам поможет.

Не определен для WCF, с использованием Gzip в среднем сокращается, контентная кодировка сохраняется на 75% от текстовых файлов (HTML, CSS и JavaScript) и 37% в целом. Gzipping полезен только для больших ресурсов. Из-за накладных расходов и латентности сжатия и декомпрессии вы должны только gzip файлы выше определенного порога размера (несколько КБ); Файлы Gzipping ниже могут сделать их больше.

Таким образом, сжатие в основном полезно, если пропускная способность сети является узким местом (отправка больших сообщений или ограничение полосы пропускания). В случае, когда ЦП является узким местом, сжатие уменьшит пропускную способность. Что касается каждой оптимизации, то необходимо провести соответствующее тестирование в моделируемой среде, чтобы узнать, приносит ли это преимущество приложению.

Если служба Web-размещенные в IIS, служба может быть сконфигурирована для отправки сжатого ответа с помощью динамического модуля сжатия (с использованием HTTP заголовков Content-Encoding) без использования WCF вещи

+0

Спасибо! Я собирался начать писать некоторые сообщения, которые передавали бы, среди прочего, способность адаптировать сжатие (адаптивное арифметическое кодирование, если быть точным), но ничего более неприятно, чем вкладывать несколько часов в что-то, а затем выяснять, что это было предложено из коробки! –

+0

Что я нашел, так это то, что WCF Stream отправляет не более 64 Кбайт одновременно. И похоже, что я могу взять первые 64 КБ из потока, десериализировать его и использовать. Который говорит мне, что .NET gzipping 64KB куски, что на самом деле довольно ужасно. – Sal

Смежные вопросы