Wednesday, September 9, 2009

A truely simple example to get started with WCF

A truely simple example to get started with WCF

Recently I needed to set up some simple code to demonstrate WCF (as an alternative to some other means of communication in distributed applications). But when I googled around, I could not find a really, really simple WCF example. Sure, there are lots of WCF introductions, but they all explain a lot of stuff I did not really want to know at that time. Also they most often spread the code across many files and even across languages (C# and XML). And that´s what I really, really hate! When I first try out a new API like WCF I want to have everything needed in one (!) place. I want all that´s required to be the minimum and in my favorite programming language. This way I can focus best on what´s really essential without getting distracted by syntax and unnecessary (but cool) "fluff".

Finally I resorted to a book I wrote together with co-author Christian Weyer: ".NET 3.0 kompakt" (German). As you can imagine, I did not write the chapter on WCF, though ;-) In our book I found the most simple/gentle introduction to WCF and finally was able to set up my sample program within some 20 minutes. I only had to experiment a little for getting the client code to run without resorting to XML, since Christian did not show imperative code for it in the book.
Now, to make life easier for you, I present to you the most simple WCF application I can think of in one piece. Copy the pieces into a VS 2005 console project, reference the System.ServiceModel library from .NET 3.0 and off you go. The code should run right out of the box. (Or download it here.)
Although I don´t want to repeat what´s been said in our book or in others like "Programming WCF Services" by Juval Löwy or elsewhere on the web about WCF (e.g. here or here or here, I think it´s in order to give you a quick tour through my code:

Service definition

    1 using System;
    2 using System.Collections.Generic;
    3 using System.Text;
    5 using System.ServiceModel;
    8 namespace WCFSimple.Contract
    9 {
   10     [ServiceContract]
   11     public interface IService
   12     {
   13         [OperationContract]
   14         string Ping(string name);
   15     }
   16 }

My simple sample service is of course trivial, since I´m not interested in service functionality but getting the WCF infrastructure to run. So my service WCFSimple.Contract.IService just consists of a single method - Ping() - which accepts a name and responds with a greeting. Passing in "Peter" returns "Hello, Peter".
Defining a WCF service means defining its functionality in a so called service contract which is given as an interface here. That this interface is a service contract and which of its methods should be published is signified by the attributes.

Service implementation

   19 namespace WCFSimple.Server
   20 {
   21     [ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall)]
   22     class ServiceImplementation : WCFSimple.Contract.IService
   23     {
   24         #region IService Members
   26         public string Ping(string name)
   27         {
   28             Console.WriteLine("SERVER - Processing Ping('{0}')", name);
   29             return "Hello, " + name;
   30         }
   32         #endregion
   33     }

See full details:

No comments: