WCFを使用して通信するクライアント/サーバーアプリケーションがあり、NetDataContractSerializerを使用してオブジェクトグラフをシリアル化します。SOAPメッセージではなく、バイナリ形式でWCFメッセージをシリアル化します。
サーバーとクライアントの間で多くのデータが転送されるため、データメンバのサイズを微調整することでサイズを縮小しようとしました(intをshort、intにlongなどに変更しました)。
チューニングが終了したら、転送されたデータの量は変更されていないことがわかりました。
問題は、NetDataContractSerializerがオブジェクトグラフをXMLにシリアル化するため、データメンバのサイズに関係なく、その値のサイズだけが問題になります。たとえば、Int16データメンバの値10023は、10023(0x2727)ではなく、文字列 "10023"(0x3130303233)としてシリアル化されます。
Remotingでは、データメンバーのタイプに応じて値をシリアライズしたBinaryFormatterを使用できますが、WCFで使用できるかどうかわかりません。
誰かに解決策がありますか?
?シリアライゼーション時間が短縮されるのか、それとも単にメッセージサイズが縮小されるのでしょうか? –
このカスタムバインディングと、名前付きパイプトランスポートでbinaryMessageEncodingを使用しました。メッセージは、WCFテストクライアントと同様に、トレースリスナーのメッセージログごとに引き続きXMLエンコーディングです。私は100%自信がありません。これらは、生のメッセージを取るのではなく、ログを記録するオブジェクトのXMLシリアル化を自分で行っていないと確信しているわけではありません。 WCFでは、生の要求/応答とWebAPIを簡単に扱うことが難しくなります。 – AaronLS
この回答は参考になりますが、バイナリエンコーディングは、メッセージがどのように「ワイヤー上で」送信されるか、つまりシリアル化された後にのみ変化することに注意してください。これは確かにデータサイズを削減しますが、シリアライズ方法は変更されません。より良い結果を得るために、バイナリエンコーディングを圧縮と併用することができます。 –