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
C# Code:
[DataContract
(Namespace="http://www.msdotnetheaven.com/SampleServices/MsDnH/2009")]
public class
MsDnHService
{
[DataMember]
public string
ServiceId {get; set;}
}
VB.NET Code:
_
Public Class MsDnHService Private _ServiceId As String
_
Public Property ServiceId() As String
Get
Return _ServiceId
End Get
Set(ByVal value As
String)
_ServiceId = value
End Set
End Property End Class
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:
C# Code:
[ServiceContract]
public interface
IMsDnHService
{
[OperationContract]
bool
StartServices(MsDnHService msdnhService);
}
VB.NET Code:
_
Public
Interface IMsDnHService _
Function
StartServices(ByVal msdnhService As MsDnHService) As Boolean
End
Interface
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:
C# Code:
[MessageContract]
public class
ProcessMsDnHRequestMessage
{
[MessageHeader]
public int
requiestId;
[MessageBodyMember(Position=0)
]
public
MsDnHRequest msdnhRequest;
}
VB.NET Code:
_
Public
Class ProcessMsDnHRequestMessage _
Public
requiestId As Integer _
Public msdnhRequest As MsDnHRequest
End Class
Now, above is used
with the service contract as shown bellow
[ServiceContract]
public interface
IMsDnHRequest
{
[OperationContract]
public
MsDnHResponseMessage msdnhRequest (ProcessMsDnHRequestMessage message);
}
VB.NET Code:
_
Public
Interface IMsDnHRequest
End
Interface