メッセージサイズを取得するためにDataContractSerializerを使用してWCFメッセージをシリアル化しようとしています(サービストレースビューアを使用せずに)。以下は、コードスニペットです:DataContractSerializerを使用してWCFメッセージをシリアル化する方法は?
public void BeforeSendReply(ref Message reply, object correlationState)
{
byte[] bytes = null;
var messageBuffer = reply.CreateBufferedCopy(Int32.MaxValue);
var message = messageBuffer.CreateMessage();
var dcs = new DataContractSerializer(typeof(Message));
using (var ms = new MemoryStream())
{
dcs.WriteObject(ms, message);
bytes = ms.ToArray();
Console.WriteLine(String.Format("Message size = {0}", bytes.Count()));
}
}
そうで、それは次の例外発生します
タイプ 'System.ServiceModel.Channels.BodyWriterMessage' をシリアル化することはできませんが。 を DataContractAttribute属性で、それに をDataMemberAttribute属性でシリアル化するすべてのメンバーを示す とマーキングします。 タイプeがコレクションの場合は、 CollectionDataContractAttributeを使用して とマークします。
何ができますか?
.NETのどのバージョンを使用していますか?あなたはv3.5(SP1ではなく)を使用していないことを確認できますか? –