我以前没有用过MessageContract,听说跟DataContract差不多。可是我用的时候发现还是有些不同:1.DataContract在System.Runtime.Serialization命名空间下;MessageContract在System.ServiceModel下。2.客户端调用DataContract作为参数的方法时,是直接传定义好的DataContract;而调用MessageContract的方法,在客户端看来就好像没有这个类一样的,直接把Contract的属性作为参数传进去,就像这样:Proxy.ToStr(123,"Male","Znf");而契约是这样的:
[MessageContract]
public class CustomerMessage
{
    [MessageBodyMember]
    public int Id { get; set; }    [MessageBodyMember]
    public string Name { get; set; }    [MessageBodyMember]
    public string Gender { get; set; }
}对于问题2,请问是否是我配置或者编码错误造成这种现象,或者是消息契约在使用上和数据契约本来就不同?
还有,请前辈谈一谈数据契约和消息契约到底有什么区别?原理和使用方面。

解决方案 »

  1.   

    最近也在学WCF,不过还没有看到这部分,凭借以前的印象,比较肤浅的说就是,一个是基于Soap的,一个是基于XSD的。
      

  2.   

    印象中Message好像支持流,也不知道对不会,等过几天看过书了再回来确认一下。
      

  3.   

    WCF中DataContract和MessageContract
      

  4.   

    书看了,主要讲的是一些原理,没有结合应用。我说一下自己的体会,DataContract主要专注于数据本身,而MessageContract由于使用了Soap,其Body部分基本上就是DataContract的内容,除了数据之外,还附加了头信息,这样,我们可以灵活的添加一些自己定义的东西,这部分可以不用附加的任何契约,只要自己知道怎么解析读取就行了。至于我上面所说的流的部分,不用理会,两种应该都支持(不过我也没做实验)。上面基本上是我自己琢磨的,对不对的不一定,还是多听听有经验的开发者怎么说的吧,我只是初学乍练。