使用WCF通过线路传输最少量的数据

我的项目有一个netTCP WCF服务。 这是它的app.config:

                    

是否有任何可以做的事情来最大限度地压缩通过线路发送的数据? 我的项目是内部的,因此速度和处理能力基本上没有问题。

压缩从客户端发送到WCF服务的数据有哪些好的提示和技巧?

绑定指定的消息编码将决定您的数据如何在线路上转换为字节。 对于NetTcpBinding,它将自动使用二进制编码,从而为您提供所有内置WCF编码器中最紧凑的消息表示。

有关更多信息,我会建议这些资源:

  1. Zulfiqar Ahmed: SOAP消息大小优化:编码与压缩
  2. Kenny Wolf: WCF编码器的性能特征
  3. MSDN: 选择消息编码器

它取决于您发送的数据类型,但如果您使用序列化来创建数据,那么序列化为XML并使用GZipStream压缩它可以导致比压缩二进制序列化生成的数据更少的字节。

我仍然试图将所有这些拼凑在一起,但我知道当你使用DataContractAttribute时,你正在使用DataContract序列化。 我不清楚这个序列化方案和Serializable方案之间的区别,但从我能够收集到的,它们是不同的。

Marc Gravell是SO的主持人之一,是我在这个问题上看过的专家。 他实际上有一个名为protobuf-net的序列化方案,可以在这里使用。

  1. 使用压缩..在4.5

         

  2. 不要使用命名空间set namespace来“”(以及服务契约。)[DataContract(Namespace =“”)] public class AddDeckMessage

  3. 很少(如果曾经在XML上发送接口/基类)…… XML不理解,它添加了Microsoft explcit XML。 不要使用knowntype使用普通的DTO,你可以自定义到线…

  4. 使用EmitDefaultValue

  5. 使用非tcp压缩时要小心byte []。 如果您将其视为123,则每个字节会看到15-30个字节,具体取决于编码。 如果需要使用标准WS协议,请使用uuencode。