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 .