Basics of WCF

In this article, I describe the Windows Communication Foundation and it's basics.

Here I want to tell you about Windows communication Foundation and ABC.
 
Before learning about ABC, we have to know what WCF is and where it is useful.
 

Windows communication foundation

 
WCF is a programming Platform and run time system for building, running and deploying the network distributed services. It is the latest Service oriented technology. Interoperability is the fundamental characteristics of WCF. It has web service, .Net Remoting, MSMQ and COM+ features. It combines all these things into a single umbrella. That means it provides a common platform for all .Net communication.
 
net3.bmp 
 

What is ABC?

 
Without ABC there is no WCF. ABC means Address, Binding and Contract.
 

Address

 
In WCF, every service is associated with a unique address. The address provides two important elements: the location of the service and the transport protocol or transport schema used to communicate with the service. The location portion of the address indicates the name of the target machine, site, or network; a communication port, pipe, or queue; and an optional specific path or URI. A URI is a Universal Resource Identifier, and can be any unique string, such as the service name or a GUID.
WCF supports following transport schemas
  1. HTTP
  2. TCP
  3. Peer Network
  4. IPC(Inter Process communication)
  5. MSMQ 
Addresses have the following format:
 
[base address]/ [optional URI]
 
Sample Addresses are:
 
http://localhost:8001
http://localhost:8001/firstservice
net.tcp://localhost:8002/firstservice
net.pipe://localhost/piped
net.msmq://localhost/firstservice
 
TCP Addresses
 
TCP addresses use net.tcp for the transport, and typically include a port number such as:
 
net.tcp://localhost:8002/firstservice
 
When a port number is not specified, the TCP address defaults to port 808.
 
HTTP Addresses
 
HTTP addresses use http for transport, and can also use https for secure transport. You typically use HTTP addresses with outward-facing Internet-based services, and can specify a port such as:
 
http://localhost:8001
http://localhost:8001/firstservice
 
When the port number is unspecified, it defaults to 80. Similar to TCP addresses, two HTTP addresses from the same host can share a port, even on the same machine.
 
IPC Addresses
 
IPC addresses use net.pipe for transport, to indicate the use of the Windows named pipe mechanism. In WCF, services that use named pipes can only accept calls from the same machine. Consequently, you must specify either the explicit local machine name or localhost for the machine name, followed by a unique string for the pipe name:
 
net.pipe://localhost/piped
 
You can only open a named pipe once per machine, and therefore it is not possible for two named pipe addresses to share a pipe name on the same machine.
 
MSMQ Addresses
 
MSMQ addresses use net.msmq for transport, to indicate the use of the Microsoft Message Queue (MSMQ). You must specify the queue name. When you're dealing with private queues, you must specify the queue type, but that can be omitted for public queues:
 
net.msmq://localhost/private/firstservice
net.msmq://localhost/firstservice
 
Peer Network Address
 
Peer network addresses use net.p2p for transport, to indicate the use of the Windows peer network transport. You must specify the peer network name as well as a unique path and port.
 

Bindings

 
Specifies how a service is accessible. In other words: how the two parties will communicate in terms of transport (HTTP, TCP, NamedPipe, Peer2Peer and MSMQ), encoding (text, binary etc.) and protocols (like transactional support or reliable messaging).
 
Basic binding
 
Offered by the BasicHttpBinding class, this is designed to expose a WCF service as a legacy ASMX web service, so that old clients can work with new services. When used by the client, this binding enables new WCF clients to work with old ASMX services.
 
TCP binding
 
Offered by the NetTcpBinding class, this uses TCP for cross-machine communication on the intranet. It supports a variety of features, including reliability, transactions, and security, and is optimized for WCF-to-WCF communication. As a result, it requires both the client and the service to use WCF.
 
Peer network binding
 
Offered by the NetPeerTcpBinding class, this uses peer networking as a transport. The peer network-enabled client and services all subscribe to the same grid and broadcast messages to it. Peer networking is beyond the scope of this book since it requires an understanding of grid topology and mesh computing strategies.
 
IPC binding
 
Offered by the NetNamedPipeBinding class, this uses named pipes as a transport for same-machine communication. It is the most secure binding since it cannot accept calls from outside the machine and it supports a variety of features similar to the TCP binding.
 
Web Service (WS) binding
 
Offered by the WSHttpBinding class, this uses HTTP or HTTPS for transport, and is designed to offer a variety of features such as reliability, transactions, and security over the Internet.
 
Federated WS binding
 
Offered by the WSFederationHttpBinding class, this is a specialization of the WS binding, offering support for federated security.
 
Duplex WS binding
 
Offered by the WSDualHttpBinding class, this is similar to the WS binding except it also supports bidirectional communication from the service to the client.
 
MSMQ binding
 
Offered by the NetMsmqBinding class, this uses MSMQ for transport and is designed to offer support for disconnected queued calls.
 
MSMQ integration binding
 
Offered by the MsmqIntegrationBinding class, this converts WCF messages to and from MSMQ messages, and is designed to interoperate with legacy MSMQ clients.
 

Contracts

 
In WCF, all services expose contracts. The contract is a platform-neutral and standard way of describing what the service does. WCF defines four types of contracts.
 
 
Describe which operations the client can perform on the service.
  1. [ServiceContract]  
  2. interface IFirstContract  
  3. {  
  4.   [OperationContract]  
  5.   string MyAdd( );  
  6. }  
Data contracts
 
Define which data types are passed to and from the service. WCF defines implicit contracts for built-in types such as int and string, but you can easily define explicit opt-in data contracts for custom types.
  1. [DataContract]  
  2. struct Contact  
  3. {  
  4.    [DataMember]  
  5.    public string FirstName;  
  6.   
  7.    [DataMember]  
  8.    public string LastName;  
  9. }  
Fault contracts
 
Define which errors are raised by the service, and how the service handles and propagates errors to its clients.
  1. [ServiceContract]  
  2. interface IFirstContract  
  3. {  
  4.   [OperationContract]  
  5.   [FaultContract(typeof(InvalidOperationException))]  
  6.   [FaultContract(typeof(string))]  
  7.    double MyAdd(double number1,double number2);  
  8. }  
Message contracts
 
Allow the service to interact directly with messages. Message contracts can be typed or untyped, and are useful in interoperability cases and when there is an existing message format you have to comply with. As a WCF developer, you should use message contracts only rarely, so this book makes no use of message contracts.
  1. [MessageContract]  
  2. public class BankingTransaction  
  3. {  
  4.   [MessageHeader] public Operation operation;  
  5.   [MessageHeader] public DateTime transactionDate;  
  6.   [MessageBodyMember] private Account sourceAccount;  
  7.   [MessageBodyMember] private Account targetAccount;  
  8.   [MessageBodyMember] public int amount;  
  9. }