VS.net creates a template when you create a WCF project.
It adds a class to the iService1.cs file:
// Use a data contract as illustrated in the sample below to // add composite types to service operations. [DataContract] public class CompositeType { bool boolValue = true; string stringValue = 'Hello '; [DataMember] public bool BoolValue { get { return boolValue; } set { boolValue = value; } } [DataMember] public string StringValue { get { return stringValue; } set { stringValue = value; } } }
Since a WCF service can return any user defined class, why use a DataContract and CompositeType class?
I can return something like:
[OperationContract] MyUserCollection GetUsers();
What am I missing?
The DataContract is just a formal definition of a type that can be understood on both sides of the service boundary.
If you return, as in your example, a ‘MyUserCollection’ object, the consumers of your service will need to reference the innards of your service/system, which is a violation of the SOA tenet of explicit boundaries. By using a DataContract, you are publishing the structure of your return types in a loosely-coupled way.