Question: I'm bit confused with how MessageContract Attribute works in WCF.

When I put the MessageContract the proxy shows two parameters instead of 1.
e.g.

```
GetResultResponse GetOperation(GetResultRequest request)

[MessageContract]
public class GetResultRequest 
{
   [MessageHeader]
   public Header Header { get; set; }
   [MessageBodyMember]
   public List<Person> PersonList { get; set; }

}

```

The proxy generates this method signature:

```
GetOperation(ref Header, List<Person> personList)

```

When I remove MEssageContract Attributes:
Proxy Generates correct signatures:

```
GetOperation(GetResultRequest request)

```

Could anyone please confirm if this is the expected behavour?

Answer: 
That is default behavior. When you generate proxy it doesn't create message contracts by default. You can turn this on in [advanced configuration](http://msdn.microsoft.com/en-us/library/bb514724.aspx) in *Add Service reference* (by checking *Always generate message contracts*) or by `/messageContract` switch in [svcutil](http://msdn.microsoft.com/en-us/library/aa347733.aspx). Once you turn it on you will get methods with single message contract parameter as you have on the service.
Unless you have the specific requirement to mark the header with the MessageHeader attribute, try to change the class attribute to Datacontract and your properties to DataMember attributes and see if the behaviour changes. As far as I know, unless you implement a custom serializer you cannot influence how svcutil will create your proxy.