Basic WCF Concept and Terminologies

November 20, 2011


Windows Communication Foundation was official released with .NET 3.0 a couple of months ago. For those people who’re doing connected, distributed systems or are in any way interested in communication aspects of systems, this ought to be a God-send. WCF basically rolled all the different Microsoft messaging formats into one, making it extremely easy to architect the communication layer of simple to complex applications. This tutorial aims to explain the basic concepts behind the common terminology used in WCF development and design. Below is a quick overview of the WCF architecture WCF Programs WCF programs are basically divided into 3 different types of programs. They are common known as Clients Clients are program that consumes the services, they are normally the ones that initiate the messenging to the service. Depending on the designed architecture of your application, it is possible that a service behaves as a client as well. Services Services are the programs that offers the services to the consumers. They are the ones that react and process the messages, similar to the backend of the application. They can be viewed as the equivalence of web services in .Net 2.0. All services have to have endpoints specified in order to work. A good way to remember proper endpoint configurations is ABC. A being Address, B being Binding and C being Contracts. Address Address are the expose points of services. Services have to tell the world that where they are via addresses. Bindings Bindings will describe to the world on how they will communicate with the world. They contain information such as transport way, how they are encoded, are they reliable etc. Contracts are of (but not necessary all have to be present) 3 different kinds Service Contract Describes what the service does. Data Contract Define custom messaging structure. Message Contract Define the message format that is passed between services. Intermediaries Intermediaries are programs that act as “middle-man”, their basic roles can be similar to providing a firewall, routing, gateway etc. They are commonly invisible to the client and services. Messages All services and clients communicate via messages, which are made up of one body, and one or more header. All WCF messages are XML formatted and transport neutral. In other words, you can specify different forms of transport (HTTP, MSMQ, Named Pipes etc) for different messages. Within each application, you can specify different messaging transport depending on the communication needs of the system. Basically, messages can be divided into Simplex One way messaging. Simplex in short means “fire and forget” Duplex Asynchronous two-way messaging. In short this means that once fired, the application will carry on doing its own thing. Upon the return results, it will then handle it. Request Reply Synchronous 2 way messaging. This is the common communicate method whereby you’ll fire a request, and wait for the response before continuing. Channels Before a client and service can talk to each other, they have to go through a channel. Imagine a channel as a pipe, with one end being the input message and the other end with the results of the message. There’re different channels that can be stacked onto each other, they are commonly known as Channel Stacks. They can be of these different types: Reliable Sessions TCP Transport Binary Message Encoder Windows Security Request Reply The way in which messages are sent through the pipe (Channel) is known as a Transport and they way at which they are encoded are known as Encodings. Transport can be made up of the following: HTTP TCP MSMQ Named Pipes