【问题标题】:How to send custom objects in WCF Message如何在 WCF 消息中发送自定义对象
【发布时间】:2011-10-27 05:08:06
【问题描述】:

我想在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

有人可以帮我找出我的错误吗?

【问题讨论】:

    标签: c# wcf client-server message


    【解决方案1】:

    看起来您正在寻找DataContract

    using System.Runtime.Serialization;
    
    [DataContract]
    public class person
    {
        [DataMember]
        string Id;
    
        [DataMember]
        string Name; 
    }
    

    查看Using Data Contracts 了解有关 DataContracts 和 WCF 的更多信息。

    编辑

    不确定这是否可以解决问题,但正如我在回复您的评论时指出的那样,CreateMessage 方法有一个重载,它需要一个 XmlObjectSerializer。上面的 MSDN 文档相当薄,但我认为这样的事情可能会做到:

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

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

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

    【讨论】:

    • 嘿,我试过这个,但我的服务合同的输入和输出只有 System.ServiceModel.Channel.Message。由于这个人不是直接输入,我认为它不会帮助我。
    • @realn - 如果您使用替代的 CreateMessage 方法会怎样 - 有一个为 XmlObjectSerializer 采用第四个参数:Message.CreateMessage Method (MessageVersion, String, Object, XmlObjectSerializer)
    • 第 1 行位置 695 中的错误。需要来自命名空间“schemas.datacontract.org/2004/07/DCS”的元素“Person”。遇到名称为“字符串”的“元素”,命名空间“schemas.microsoft.com/2003/10/Serialization”。
    • 这就是我收到 SerializationException 捕获的消息。
    • @realn - 您是否使用[DataContract] 属性和[DataMember] 装饰字段?根据错误中的命名空间,您可能没有。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多