如何在WCF消息中发送自定义对象

时间:2011-10-27 05:08:06

标签: c# wcf client-server message

我想在system.servicemodel.Channels.Message中发送一个自定义对象。像

public class person
{
    string Id;
    string Name;
}

MessageVersion mv = MessageVersion.Create(Soap12);
String action = "Msg";

Message msg = Message.Create(mv, action, new person());

serviceref.ProcessMsg(msg) // this is my service reference in client

//when i tried to access this in Service like 
person p = msg.GetBody<person>()
//I am getting an serialization exception
//I have the Person class on both client and service side

有人可以帮我弄清楚我的错误吗?

1 个答案:

答案 0 :(得分:5)

看起来您正在寻找DataContract

using System.Runtime.Serialization;

[DataContract]
public class person
{
    [DataMember]
    string Id;

    [DataMember]
    string Name; 
}

有关DataContracts和WCF的更多信息,请查看Using Data Contracts

修改

不确定这是否能解决问题,但正如我在回复你的评论中所指出的那样,CreateMessage方法的重载超过了XmlObjectSerializer。关于它的MSDN文档相当薄,但我认为这样的事情可能会这样做:

Message msg = Message.Create(mv, action, new person(), new DataContractSerializer(typeof(person)));

我没有对此进行测试,但至少它可能会让你指向正确的方向。

DataContractSerializer需要在我的答案的第一部分提供DataContract(person)。