In this article we are going to see an introduction to Windows Communication 
Foundation.
WCF is a unified programming model for building service oriented distributed 
applications . 
Lets go down the History of Distributed applications . The Monolithic 
applications gave way to applications built with components using COM ( 
Component Object Model ) . Monolithic applications would mean where everything 
exists with a single exe or a application . Using COM you could create 
components which would do particular tasks and COM would make these applications 
available to you .
This was good for the Desktop applications . But what about the Web world . So 
Desktop COM make way for Distributed COM .
So now COM components could be hosted on the Server and your application could 
access this COM components .
DCOM further evolved into COM+ and intergrated with the Transaction Server . So 
all your datalogic and Business log would now run on a Central Server and you 
could now have transactions supported as well.
And then came .NET , and rather than completely rewrite the Business Logic . 
The .Net components can now use Enterprise Services to Leverage COM+.
Another option to build distributed applications was Remoting. .NET Remoting 
consists of a client and remote objects hosted on a server .
Client can access remote objects as if they are local .
Enterprise Services and .NET Remoting require client , components and data to be 
on the same network . But what happends when that is not the case . What happens 
when you client and data to be accessed by the Client are not in the same 
netwrok .
Web Services Solves this problem . Web Services enable you to pass data as XML 
over Internet .
Now the Client and Server to pass the XML back and forth both Client and Server 
need to agree upon how the xml looks like . That's where SOAP comes in .
Simple Object Access Protocol defines structure of XML messages clients and 
services pass .
Visual Studio helps us create and comsume Web Services easily without much trouble . So this approach of Building Distributed applications is called 
Service orientation .
A Service is a program that performs a task and that you can interact with 
through well defined messages .
In other words we can say that a Service Oriented application consists of 
loosely coupled services that communicate through messages and contracts.
Messages are the actual messages that go back and forth and contracts are 
basically the interfaces that define what the service will do .
They are Loosely coupled because the Client does not instantiate the Service .
So this is a major difference between a Service oriented architecture or say a 
COM component model where the Client would have to instantiate the Server Class 
.
In the Service Oriented Architecture the Client does not instantiate the Service 
, instead it just passes the method .
So there is a Shift from remotely invoking components to passing messages 
between services .
Principles of Service Orientation :
- Boundaries are explicit i.e. Services 
	communicate by sending messages across the boundary. All communication 
	occurs through the messages .
 - Services are Autonomous i.e. You can build 
	, manage and version services independently . You can change a service 
	without affecting Clients as long as clients can continue sending and 
	receiving the messages .
 - Services share Contract and Schema 
	
	Contracts describe the message services can send and receive .
	
	Schemas define how the client and services construct the messages they 
	exchange .
  - Compatibility is policy based .
 
Services can define the circumstances under 
which clients can communicate with them.
So at this point you must be getting a question are Web Services Service 
Oriented . The answer is Yes . So we already have a Service Oriented technology 
working great for us . So why go for WCF . Why do we developers have to learn 
another technology.
Whats wrong with what we have .
Too many ways to create a distributed applications . Too many options are not 
good as well . WebServices ( SOA ) and Enterprise Services , .NET Remoting ( 
not SOA).
Which should you use and when 
Do you need interoperability ?
Are you going over the Internet or over TCP ?
Are you accessing services internally or externally ?
In simple terms WCF is a one word solution to all our problems .
WCF comes to the Rescue :
- WCF Provides a Unified Programming Model 
	for building Service oriented applications . 
 - One model whether communication is 
	internal or external .
 - Same service can be exposed over multiple 
	protocols without duplicating effort or switching technologies .
 
If you had to expose the WCF Externally you 
would expose it on HTTP and if you had to expose the WCF Internally you could do 
it on TCP and you could expose both on same time as well.
Lets also discuss the most common question everyone asks when starting with WCF.
WCF Vs WebServices :
I promise that there is gone be only one Winner .
WCF Has the following features over Web Services :
- Send messages via not only HTTP , but also 
	TCP and many other protocols .
 - Send messages using formats other than 
	SOAP for example REST( Representational State Transfer ) and Plain Old XML 
	(POX).
 - Host Service on hosts other than a Web 
	Server . 
 - Built in support for transactions and 
	reliable sessions where as for WebServices these would be a add on .
 - Build in support for managing 
	configurations , tracing and logging messages.
 
In the next post we will start creating our 
first WCF Service .