Distributed Application Communication Using WCF | CodeGuru

Distributed Application Communication Using WCF

Introduction Windows Communication Foundation (WCF) is a subset of the .NET Framework that is designed to take interoperability in distributed application environments to the next level. With the emergence and acceptance of Web services and their accompanying protocols and standards, development of distributed applications has become a developer norm. WCF simplifies that development by introducing […]

Written By
CodeGuru Staff
CodeGuru Staff
Dec 31, 2009
3 minute read
CodeGuru content and product recommendations are editorially independent. We may make money when you click on links to our partners. Learn More

Introduction

Windows Communication Foundation (WCF) is a subset of the
.NET Framework that is designed to take interoperability in
distributed application environments to the next level. With
the emergence and acceptance of Web services and their
accompanying protocols and standards, development of
distributed applications has become a developer norm. WCF
simplifies that development by introducing a service-
oriented programming model that at its base provides
asynchronous and untyped message-passing. Extending from the
base are options and protocols designed to give the
developer choice in transport and encoding methods among
many other configurations.

Those familiar with .NET Remoting, .NET Web services and
Enterprises Services will recognize and have a familiar
development experience in WCF. In addition to the old
tricks, WCF enables serialization capabilities that allow
loose coupling and versioning of distributed application
across various platforms. This allows development of each
application in the environment to be performed more
independently and with fewer maintenance issues. Integration
with existing .NET Framework technologies such as COM+, Web
Services Enhancements (WSE), Message Queuing and others is
also provided within WCF.

Windows Communication Foundation comes with its own set
of terms and expressions. Before beginning it is important
to understand the following:



terms and expressions

Click here for larger image

The following link has additional WCF terms and
definitions: http://msdn.microsoft.com/en-
us/library/ms731079.aspx

Whether you are developing a Windows Communication
Foundation application to communicate across different
platforms, across the Internet, or just on the same server,
there are several tasks required to build a WCF application.
They are listed in order below:


  • Define the service contract

  • Implement the contract

  • Configure the service

  • Host the service

  • Consume the service via a client

The following walkthrough uses a console application to
host the service and a WPF client application to consume the
service. The WPF client application will retrieve a product
list from the service, display it to the user and allow the
user to delete individual products. To get started, create a
new console application in Visual Studio using the Console
Application template and name it
WCFProductService.

This walkthrough will use a class called
Product. Data will be created at runtime for
purposes of the example but a more likely scenario is that
you would communicate with a database to retrieve the
data.

  using System;
  using System.Collections.Generic;
  using System.Linq;
  using System.Text;
  namespace WCFProductService
  {
      public class Product
      {
          public Product()
          { }
          public int ProductID { get; set; }
          public string ProductName { get; set; }
          public string ProductDesc { get; set; }
          public int Inventory { get; set; }
          public List<Product> GenerateProductList()
          {
              List<Product> returnList = new List<Product>();
              returnList.Add(new Product() { ProductID = 1, ProductName = “Ball”, ProductDesc = “White, Round”, Inventory = 10 });
              returnList.Add(new Product() { ProductID = 2, ProductName = “Bat”, ProductDesc = “Wood”, Inventory = 7 });
              returnList.Add(new Product() { ProductID = 3, ProductName = “Glove”, ProductDesc = “Brown, Leather”, Inventory = 3 });
              returnList.Add(new Product() { ProductID = 4, ProductName = “Helmet”, ProductDesc = “Head Protection”, Inventory = 12 });
              returnList.Add(new Product() { ProductID = 5, ProductName = “Pads”, ProductDesc = “Body Protection”, Inventory = 12 });
              returnList.Add(new Product() { ProductID = 6, ProductName = “Jersey”, ProductDesc = “Team Spirit”, Inventory = 2 });
              returnList.Add(new Product() { ProductID = 7, ProductName = “Foam Finger”, ProductDesc = “Awesome”, Inventory = 23 });
              returnList.Add(new Product() { ProductID = 8, ProductName = “Tape”, ProductDesc = “Injury prevention”, Inventory = 102 });
              returnList.Add(new Product() { ProductID = 9, ProductName = “Club”, ProductDesc = “9 Iron”, Inventory = 11 });
              returnList.Add(new Product() { ProductID = 10, ProductName = “Bag”, ProductDesc = “Holds Clubs”, Inventory = 6 });
              return returnList;
          }
      }
  }

Product.cs


Defining the Service Contract

To create the service contract you will first have to add
a reference to System.ServiceModel.dll using
the Solution Explorer. Once the reference is added to the
project you will need to add the
System.ServiceModel namespace to the project by
adding the following using statement.

using System.ServiceModel;

Program.cs


Next define a new interface called
IProductManager and apply the
ServiceContract attribute to the interface.
For this example specify the Namespace value of the
attribute to “http://CompanyName.ProductManager”. It is best
practice to specify the namespace as it prevents the default
namespace value being added to the contract name. This
interface will be used later when implementing the service
contract.

In the IProductManager interface you will
then declare a method for each operation you wish to expose
via the contract. Add a method to retrieve the product list
and one to delete a product. Add the
OperationContract attribute to each method you
want to expose. When finished your interface should look
similar to the following.

  // …
     [ServiceContract(Namespace=”http://CompanyName.WCFProductService”)]
     public interface IProductManager
     {
         [OperationContract]
         List GetAllProducts();
         [OperationContract]
         void DeleteProduct(int n1);
     }
  // …

Program.cs


Advertisement

Implementing the Contract

After creating the contract via the interface above you
will then need to implement the interface. For this create
a class called ProductManagerService that
implements the IProductManager interface. Then
implement each method that was defined in the interface
within the ProductManagerService class. Your
code should look similar to the following when finished.

  // …
     public class ProductManagerService : IProductManager
     {
         public List<Product> GetAllProducts()
         {
             if (MasterProductList == null)
                 MasterProductList = new List<Product>();
             if (MasterProductList.Count == 0)
                 MasterProductList = Product.GenerateProductList();
             return MasterProductList;
         }
         public void DeleteProduct(int n1)
         {
             if (MasterProductList == null)
             {
                 // throw and handle exception
             }
             var productToDelete = (from p in MasterProductList
                                   where p.ProductID == n1
                                   select p).FirstOrDefault();
             MasterProductList.Remove(productToDelete);
          }
      }
  // …

Program.cs


CodeGuru Logo

CodeGuru covers topics related to Microsoft-related software development, mobile development, database management, and web application programming. In addition to tutorials and how-tos that teach programmers how to code in Microsoft-related languages and frameworks like C# and .Net, we also publish articles on software development tools, the latest in developer news, and advice for project managers. Cloud services such as Microsoft Azure and database options including SQL Server and MSSQL are also frequently covered.

Property of TechnologyAdvice. © 2026 TechnologyAdvice. All Rights Reserved

Advertiser Disclosure: Some of the products that appear on this site are from companies from which TechnologyAdvice receives compensation. This compensation may impact how and where products appear on this site including, for example, the order in which they appear. TechnologyAdvice does not include all companies or all types of products available in the marketplace.