クラスを考えるのサイズ:WCF - おおよそのメッセージを測定することは、プログラム
[DataContract]
public sealed class ChangedField
{
[DataMember(Name="I")] public ushort FieldId { get; set; }
[DataMember(Name="V")] public object Value { get; set; }
}
WireSharkのバインディングWCF TCPを経由して送信されたときに、メッセージのエンコーディングはバイナリのみ(印刷可能な文字である、ことを示しているが、あなたが得ますアイデア):
ChangedFielda.I..a.V....e:double..e http://www.w3.org/2001/XMLSchema.s.....a.
しかし、私はそう...
0123のように、この型のインスタンスをシリアライズ場合var ser = new DataContractSerializer(typeof(ChangedField));
var stream = new MemoryStream();
ser.WriteObject(stream, new ChangedField { FieldId = 1, Value = 1.23d });
...その後ストリームは、このに似ているSOAPのXMLが含まれています
<ChangedField>
<I>1</I>
<V i:type="a:double" xmlns:a="http://www.w3.org/2001/XMLSchema">1.23</V>
</ChangedField>
だから私の質問は、私は自分のコードでこのバイナリ表現を生成するためにDataContractSerializer
を制御することができますどのようにのですか?余談として
:あなたが見ることができるように、メッセージはobject
プロパティは、その型をエンコードしている必要がありますという事実(それゆえURI)によって肥大化している
。私はこのシナリオのようにフィールドIDがタイプ(この場合はdouble
)を決定するので、カスタムバイナリエンコーディングを使用するようにこれを変更します。
ありがとう、tomasr。私はバインディングを変更したくありません。私がしたいのは、メッセージサイズの違いを証明するいくつかのテストケースを作成することですが、毎回WireSharkでスヌープしたくありません。 –
Drew:これも可能です。私はここでそれを行う方法を示すサンプルアプリケーションを投稿しました:http://winterdom.com/2009/07/comparing-text-and-binary-serialization-in-wcf – tomasr
ああ、それは私のように見える後に。私は明日仕事でそれを試してみて、あなたに戻ってきます。どうもありがとう! –