我想使用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属性将其所有成员标记为 。如果 类型是一个集合,请考虑使用 CollectionDataDataContractAttribute将其标记为 。
可以做些什么?
您正在使用什么版本的.NET?你能否确认你没有使用v3.5(不是SP1) – 2011-01-21 03:15:01