我有一个客户端 - 服务器应用程序,它使用WCF进行通信,并使用NetDataContractSerializer来序列化对象图。由于大量数据在服务器和客户端之间传输,我试图通过微调数据成员的大小(例如,将int更改为short,long更改为int等)来减小其大小。以二进制方式序列化WCF消息,而不是SOAP消息
完成调整后,我发现传输的数据量没有变化!
问题是,NetDataContractSerializer会将对象图形序列化为XML,因此无论数据成员的大小如何,唯一重要的是其值的大小。例如,Int16数据成员的值10023将被串行化为字符串“10023”(0x3130303233),而不是10023(0x2727)。
我记得在Remoting中,我可以使用BinaryFormatter根据数据成员的类型对值进行序列化,但我不知道是否有可能将它与WCF结合使用。
有人有解决方案吗?
因此,没有二进制消息编码提供了显著的性能提升?序列化时间是否缩短,还是仅仅减少了消息大小? – 2012-08-02 15:08:07
我已经使用这个自定义绑定以及带命名管道传输的binaryMessageEncoding,并且消息仍然是按照跟踪侦听器中的消息日志以及WCF测试客户端的XML编码。我不是100%确信他们没有做他们自己的XML序列化对象来记录他们,而是采取原始信息。 WCF很难将原始请求/响应与WebAPI挂钩,从而使其变得简单。 – AaronLS 2014-10-31 06:11:34
这个答案很有帮助,但请注意,二进制编码只会改变消息在线路上的发送方式,即在串行化之后。虽然这肯定会减少数据大小,但它不会更改序列化方法。二进制编码可以与压缩一起使用以获得更好的结果。 – 2017-01-04 13:32:46