我有一個客戶端 - 服務器應用程序,它使用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