Передача наименьшего количества данных по сети с помощью WCF

В моем проекте есть служба netTCP WCF. Это app.config для этого:



    
        
            
                
                    
                    
                    
                        
                        
                    
                
            
        
        
            
        
    

Есть ли что-нибудь, что можно сделать, чтобы максимизировать сжатие данных, передаваемых по проводам? Мой проект является внутренним, поэтому скорость и вычислительная мощность практически не имеют значения.

Какие есть полезные советы и рекомендации для сжатия данных, отправляемых клиентом в службу WCF?

Ответы на вопрос(4)

  <binarymessageencoding compressionformat="GZip">

  <tcptransport maxreceivedmessagesize="20000000">

</tcptransport></binarymessageencoding>

Не используйте пространства имен, установите для пространства имен значение "" (и в договоре на обслуживание.) [DataContract (Namespace = "" )] открытый класс AddDeckMessage

Редко (если когда-нибудь отправлять интерфейсы / базовые классы на XML) ... XML не понимает и добавляет Microsoft explcit XML. Не используйте knowntype, используйте простые DTO, которые вы можете настроить по проводам ...

Используйте EmitDefaultValue

Будьте осторожны с byte [] со сжатием без tcp. Если вы видите 123, вы видите 15-30 байтов для каждого байта в зависимости от кодировки. Используйте uuencode, если вам нужно использовать стандартные протоколы WS.

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

 John Fisher28 авг. 2009 г., 18:43
Исходя из сложности поиска информации о сжатии WCF через TCP и о существовании функции сжатия вnoemax.com/products/wcfx/features.htmlЯ подозреваю, что вынам нужно написать код или приобрести сторонние возможности сжатия.
 Matt28 авг. 2009 г., 16:50
Так вот где я запутался - у меня нетЯ не настраиваю сериализацию, яm либо передающие примитивы, либо массив пользовательского класса. Пользовательский класс неt наследует ISerializable и не помечается атрибутом [Serialized]. Все, что я сделал, это пометил все мои собственные классы публичные свойства с атрибутом [datamember]. Кроме этого, ничего не было сделано. Так что я неЯ действительно знаю, что у меня есть. :-(
 John Fisher28 авг. 2009 г., 18:25
Ой. Затем вы'не реально контролировать то, чтос транспортированы. Вы можете посмотреть на элементы управления потоком WCF, чтобы увидеть, какое сжатие вы могли бы добавить (я не имеюсделал это). Или вы можете прекратить транспортировку реальных объектов и изменить свои контракты на транспортировку сжатых BLOB-объектов, которые преобразуются в или из реальных объектов.
Решение Вопроса

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

Для получения дополнительной информации я бы порекомендовал эти ресурсы:

Зульфикар Ахмед:Оптимизация размера сообщения SOAP: кодировка против сжатияКенни Вольф:Характеристики производительности кодеров WCFMSDN:Выбор кодировщика сообщений
 John Fisher28 авг. 2009 г., 19:22
Это может быть самый компактный из встроенных кодировщиков WCF, но онс помощью TCP, и это неПо-видимому, поддерживает фактическое сжатие.
 Iúri dos Anjos12 сент. 2017 г., 04:22
Первая ссылка не работает :( Пожалуйста, исправьте это

но я знаю, что когда вы используете DataContractAttribute, вы используете сериализацию DataContract. Я'Я не совсем понимаю, в чем различия между этой схемой сериализации и схемой Serializable, но из того, что яудалось собрать, они разные.

Марк Гравелл, один из модераторов SO, является экспертом, которого яМы смотрели на этот вопрос. У него на самом деле есть схема сериализации под названием protobuf-net, которая доступна для использования.Вот.

 Matt28 авг. 2009 г., 17:15
Кривая обучения для этого крутая :-)

Ваш ответ на вопрос