Chapter 3. Data Contracts
WCF provides the ability to host and expose native CLR types (interfaces and classes) as services, as well as the ability to consume services as native CLR interfaces and classes. WCF service operations accept and return CLR types such as integers and strings, and the WCF clients pass in and process returned CLR types. However, such CLR types are specific to .NET. This poses a problem because one of the core tenets of service orientation is that services do not betray their implementation technologies across the service boundary. As a result, any client, regardless of its own technology, can interact with any service. This, of course, means that WCF cannot allow you to expose the CLR data types across the service boundary. What you need is a way of converting CLR types to and from a standard neutral representation. The service needs a formal way of declaring how the conversion is to take place. This formal specification is called a data contract, and it is the subject of this chapter. The first part of the chapter shows how data contracts enable type marshaling and conversions, and how the infrastructure deals with class hierarchies and data contract versioning. The second part shows how to use various .NET types, such as enumerations, delegates, data tables, and collections, as data contracts.
The data contract is part of the contractual obligation the service supports, just like the service operations are part of that contract. The data ...