38
A DataContract is a description of a type that is exposed and supported by your service. A MessageContract is an abstraction over a SOAP message that allows you to explicitly dictate the structure of the underlying message.
They are meant to compliment each other and serve different purposes.
Marc Gravell answered to a similar question WCF: MessageContract, DataContract ... Confused?
One of the advantages of message-contracts is that you can set privacy against members, but in many cases this isn't necessary. In such cases, I prefer to keep the contract as simple as possible, just as a data-contract.