In simple words contract defines the functionality provides/offers by a service and functionaly uses by the client.
Main point to note is : Contract can be completely independent of the implementation of service.
Introduction
In simple words contract defines the
functionality provides/offers by a service and functionaly uses by the client.
Main point to note is : Contract can be
completely independent of the implementation of service.
In WCF[Windows Comunication Foundation] can be
grouped in following three different contract types:
Data Contract
Describes a data structure.Maps CLR types to XSD.
In other words we can say that it defines the Data received by and returned
from Service.
Here CLR types are mapped to XML schemas. Data
Contract requires explicit marking of the fields that should be serialized with
the [DataMember] attribute. [DataMember] attribute can be used regardless
wheteher the field is private or public.
Data contract is different from .NET Serialization
like :
runtime serialization: all
fields are serialized including private fields.This mechanism is used by Remoting.
XML serialization: only
public fields and properties are serialized. This mechanism is used by Web
Services.
Following is the piece of example:
[DataContract] (Namespace="http://www.msdotnetheaven.com/SampleServices/MsDnH/2009")]
public class MsDnHService
{
[DataMember]
public string
ServiceId {get; set;}
}
Service Contract
Describes the operations a service can perform.
Maps CLR types to WSDL. Also defines as,Service contract is used to define the
WSDL that describes the service. This contract is defined with interfaces or
classes with [ServiceContract] attributes and [OperationContract] attributes
for method offered by the service. Here is an example:
[ServiceContract]
public interface IMsDnHService
{
[OperationContract]
bool StartServices(MsDnHService msdnhService);
}
Message Contract
Defines the structure of the message on the wire.
Maps CLR types to SOAP messages.
It is used when complete control over the SOAP
message is needed. With this one can specify that what part of the message
should go into the SOAP header and what belongs in the SOAP
body.[MessageContract] attribute is used to specify the Message Contract'. The
header and the Body of the SOAP message are specified with the attributes [MessageHeader]
and [MessageBodyMember].
Example:
[MessageContract]
public class ProcessMsDnHRequestMessage
{
[MessageHeader]
public int requiestId;
[MessageBodyMember(Position=0) ]
public MsDnHRequest msdnhRequest;
}
Now, above is used with the service contract
as shown bellow:
[ServiceContract]
public interface IMsDnHRequest
{
[OperationContract]
public MsDnHResponseMessage msdnhRequest (ProcessMsDnHRequestMessage message);
}