title: WCF: MessageContract, DataContract ... Confused?
body: <p>I'm writing my first WCF service. I decided to write the service just as a DLL to begin with and then aspect the WCF stuff on afterwards which is where I am now.</p>
  
  <p>I was advised by the architect that I should stick to a specific format for message objects which I have done. However I've used Interfaces, complex types and lists thereof in my message objects. I'm coming to adding the attributes on and I'm getting a bit confused.</p>
  
  <p>Here's a show example of my code.</p>
  
  <pre><code>[ServiceContract]
  public interface MyServiceContract
  {
       [OperationContract]
       MyMethodResponseMessage MyMethod(MyMethodRequestMessage request);
  }
  
  public class MyService : MyServiceContract
  {
      public MyMethodResponseMessage MyMethod(MyMethodRequestMessage request)
      {
          //Do things
      }
  }
  
  //Messages
  [MessageContract]
  public class MyMethodResponseMessage 
  {
      [MessageBodyMember]
      public MyMethodResponse Body { get; set; }
  }
  
  [DataContract]
  public class MyMethodResponse
  {
      [DataMember]
      public IMyComplexTypeItem { get; set; }
  
      [DataMember]
      public List&lt;IMyComplexType&gt; Items { get; set; }
  
      [DataMember]
      public bool Success { get; set; }
  }
  
  //DTO    
  public interface IMyComplexType 
  {
      [DataMember]
      string Identity { get; set; }
  }
  
  [DataContract]
  public class MyComplexType1 : IMyComplexType
  {
       [DataMember]
       public virtual string Identity
  }
  </code></pre>
  
  <p>Can anyone comment on the correctness in the use of MessageContract, DataContract, DataMember and Serializable etc? Any pointers or glaring mistakes?</p>
  
  <p>Also which serializer is the best one to use? and what is the best strategy to ensure I get well formed XML from this so that other clients can consume my service easily?</p>