Сжатие трафика в WCF - CodeHelper

Сжатие трафика в WCF

3

Есть WCF приложуха, использующая TcpBinding. На клиенте получается некислый расход трафика ~ 1.3 мб/мин. Есть ли какие-нибудь стандартные средства в WCF для сжатия трафика или прийдется какой-то велосипед собирать с GZipStream?

PS. Передаются в основном DataSet'ы и DataTable'ы. Может на этой почве как-то оптимизировать?

Новые ответы


2

Есть очень неплохая статья на русском о том как встроить логику сжатия трафика, не меняя логики приложения. Данное решение использовал в своем проекте.

1

Вообще считается, что есть 3 способа сжатия WCF трафика. Вот перевод источника:

  • На транспортном уровне, используя message encoder, который сжимает все данные проходящие через канал. Есть пример такого подхода в WCF SDK, [SDK Folder]TechnologySamples/Extensibility/MessageEncoder/Compression
  • На уровне сообщений, добавляя определенные метаданные к SOAP-сообщению и сжимая тело этого сообщения. Можно использовать специфический WCF binding или MessageInspector Behavior чтобы модифицировать тело сообщения. Вот пример такого подхода: WS-Compression for WCF.
  • Только для транспорта на протоколе Http (не наш случай) можно использовать поддержку сжатия самого протокола.

Ну и конечно не следует забывать про оптимизацию на уровне приложения а не на уровне WCF. Сами классы DataSet и DataTable довольно-таки тяжеловесные, хотя не могу сказать относится ли это к сериализации для передачи через WCF. Где-то попадалось, что для оптимизации сериализации датасетов нужно задать пару свойств:

ds.SchemaSerializationMode = SchemaSerializationMode.ExcludeSchema;
ds.RemotingFormat = SerializationFormat.Binary;

v1.7.123.556
© 2009—2010 CodeHelper FAQ | О сайте | Обратная связь | История изменений | Статьи
Creative Commons LicenseМатериалы сайта распространяются под лицензией Creative Commons Attribution-Share Alike 3.0 Unported.