“What is Windows Communication Foundation, and why should I care?”

 [Brace yourself, it's a long blog entry]

So, I was thinking about doing a couple of blog entries on building “Connected Systems” using Windows Communication Foundation (WCF) and designing system components with “Service Oriented” techniques.  I was going to dive right into “EndPoints”, “Service Contracts”, “Service Behaviors” and other jargon to explain and demonstrate how to build solutions with Windows Communication Foundation.  Then it occurred to me, that I have been immersed in this stuff for a few months now and that maybe, just maybe, there were people out there who would love to know about WCF (Indigo), but don’t have the background information to put this stuff into context.

In other words: What is Windows Communication Foundation and why should I care?  I was going to use that as a blog title, but didn’t want to get into trouble.  :)  So, within a couple of blog entries and links to other background information, I am going to try to explain/describe WCF, in more generalized .NET terms, and why you should care about it and want to learn how to build solutions using WCF.

So, here’s my firs stab at it: Just trying to give the top level, what it is and why you should care information, without using other jargon that I would have to explain as well.  Now, when it comes to discussing technology this is a tall effort and I will do my best.  However, I will have to assume basic knowledge of .NET (Framework/Tools).

So, to answer the question of what Windows Communication Foundation “is” and “why you should care about it.”  Windows Communication Foundation (WCF) is a part of a new framework (WinFX), which extends and requires the .NET Framework version 2.0.  In addition to other technologies, WinFX contains WCF, which is how we in the Microsoft development world will build services in the future.  Although it includes Web Services, but it is also much more and I don’t want anyone to believe that this is just the new “Web Services” technology/tools.

For example, if you are a .NET developer and want to build a distributed system, you probably know how to do .NET Remoting and maybe Enterprise Services.  If you want to build message based solutions, you probably know how to build solutions using Microsoft Message Queue or some other similar technology.  If you want to build basic Web Services, you probably know how to build Web Services in .NET (.ASMX) applications.  Or, if you wanted to use some of the new Web Services specifications, many people chose to use Microsoft’s WSE 2.0/3.0. 

But as many of us have learned, to build a solution that uses any combination of any of these technologies will require learning multiple development paradigms.  This is where WCF will make your life SOOO much better.  WCF will give you the ability to build your application, without having to build in the code that does the plumbing for Messaging, Soap over HTTP (Web Services), .NET Remoting, etc.  It is a unified (or single) programming model, which has the ability to do all of these things and more (the how part, will come in later blog entries).  There are two ways to accomplish this, but a simplified description would be that you would write your application and describe how the plumbing works (e.g., Web Services or Messaging) in a configuration file.  The other way, is to describe the plumbing within the code, which has it’s pluses as well.  But, not only will you be able to describe that kind of information, you will also be able to configure your application to use Web Service Encryption or transactions, etc.

To summarize: Windows Communication Foundation is a unified programming model that will encompass all of the things we had in .NET Remoting, Basic Web Services (.ASMX), Enterprise Transactions, Messaging.  WCF also adds the ability to use many of the newer Web Service Standards.  In essence, one programming model to learn with the ability to choose how the communication and behaviors (e.g., transactions, encryption) happens by modifying a confirmation file.

What’s “cool” about it, is that WCF allows you to develop the applications and services without caring what communications / transport protocol you’ll use to connect them to each other (or “get them talking to each other”). In fact, you change from web service calls to messaging calls just by editing a config file, without making any code changes! Or you could take a service that you’ve already exposed thru messaging and add a web service interface the same way.

I know it was a long one, but I hope that this helps, but please feel free to ask questions.

For additional (more technical) description “What is it information” check out:



~ Robert