3 Ways to generate proxy for WCF Service

By | June 8, 2014

In Windows Communication Foundation, for a client application to communicate with a WCF Service, we have following options:

  • Using ChannelFactory
  • Generating Proxies

I have already discussed about difference between ChannelFactory and Proxies in one of my previous WCF Tutorial on this blog. In this article, we will focus only on multiple ways to generate proxy in Windows Communication Foundation.MCSD Exam: 70-487

“A Proxy in Windows Communication Foundation is a class that enables client applications to communicate with a service by sending and receiving messages. It actually encapsulates a number of service details like service path, service implementation technology, platform being used, communication protocol etc. as well as all the methods (signature only) of the Service Contract.”WCF Service Proxy

Windows Communication Foundation supports following three ways to generate proxy for a WCF Service.

  • Adding Service Reference
  • Implementing ClientBase
  • Using Tool i.e. SvcUtil.exe

So, in this WCF Tutorial, we will carry out all three possible ways to generate proxy for a WCF service. Let’s create a simple WCF Service first.

Create WCF Service

I have already provided implementation for a new WCF Service creation and hosting in a separate WCF Tutorial here. Please follow the steps to create a “StudentService” and host in a console application.

Option 1: Generate Proxy Adding Service Reference

Implementation of generating proxy by adding a service reference is also available here for the same WCF service i.e. “StudentService”.

Option 2: Generate Proxy by implementing ClientBase<T> class

Generating proxy by using ClientBase<T> class option has an advantage that it creates proxy at run time, so it will accommodate service implementation changes. Let’s follow the steps to generate proxy.

    • Add a Client Project to solution named as “ClientApp2” that is basically a Console Application.

ClientBase Proxy

    • Add reference of StudentService Project to ClientApp2.
    • Add following proxy class using ClientBase<T> as:
  public class StudentServiceProxy : ClientBase<IStudentService>, IStudentService
  {
           public string GetStudentInfo(int studentId)
           {
                 return base.Channel.GetStudentInfo(studentId);
           }
  }

Note: Don’t forget to add “using StudentService” to class.

    • Following is the code for program.cs class in ClientApp2. We are using above created proxy class to communicate with WCF Service “StudentService“.
 class Program
 {
         static void Main(string[] args)
         {
                     StudentServiceProxy myclient;
                     myclient = new StudentServiceProxy();
 
                     int studentId = 1;
                     Console.WriteLine(“Calling StudentService with StudentId = 1…..”);
                     Console.WriteLine(“Student Name = {0}”, myclient.GetStudentInfo(studentId));
                     Console.ReadLine();
         }
  }

Note: Don’t forget to add “using System.ServiceModel” to class.

  • App.Config file will have following configuration:
  <system.serviceModel>
            <bindings>
                <wsHttpBinding>
                    <binding name=”WSHttpBinding_IStudentService” />
                </wsHttpBinding>
            </bindings>
            <client>
                 <endpoint address=”http://localhost:4321/StudentService”
                                  binding=”wsHttpBinding”
                                  bindingConfiguration=”WSHttpBinding_IStudentService”
                                  contract=”StudentService.IStudentService”
                                  name=”WSHttpBinding_IStudentService”>
                 </endpoint>
             </client>
  </system.serviceModel>

Now, when we run the client application, we will receive the following same output as we get in earlier option “Adding Service Reference”.

WCF Proxy

Option 3: Generate Proxy by using SvcUtil.exe Tool

Let’s generate proxy by using third option i.e. SvcUtil.exe Tool by following step by step approach.

  • Add a Client Project to solution named as “ClientApp3” that is basically a Console Application.

SvcUtil Tool

  • Our WCF Service must be running, so let’s run our service.

WCF Service Running

  • Open Visual Studio Command Prompt and generate proxy using svcutil.exe tool as follows:

svcutil http://localhost:4321/StudentService /out:StudentServiceProxy.cs

SvcUtil Command
It will generate a new class “StudentServiceProxy.cs”.

  • Add newly created proxy class to our client application “ClientApp3”.
  • Call WCF Service using proxy class as:
  class Program
  {
          static void Main(string[] args)
          {
                     StudentServiceClient myclient;
                     myclient = new StudentServiceClient();
                     int studentId = 1;
                     Console.WriteLine(“Calling StudentService with StudentId = 1…..”);
                     Console.WriteLine(“Student Name = {0}”, myclient.GetStudentInfo(studentId));
                     Console.ReadLine();
           }
  }

When we run the application, it will call StudentService method getStudentInfo and generate the same output as we received in other options.

Hopefully, this WCF tutorial will be helpful to understand concepts of WCF Proxy and different ways to generate it.

Other Related Tutorials:

Top 10 Interview Questions and Answers Series:

Are you looking for a HTML5 Development Jobs in Gulf Region? Please follow below:
Top Gulf Jobs
Category: Uncategorized Tags:

About IMRAN ABDUL GHANI

Imran Abdul Ghani is working as Software Developer(Senior) with extensive knowledge in Web development technologies especially C#, ASP.NET, MVC, WCF, Web API, ADO.NET Entity Framework, jQuery etc. He has several years of experience in designing/developing enterprise level applications. He is Microsoft Certified Solution Developer for .NET (MCSD.NET) since 2005. You can reach his blogging at www.webdevelopmenthelp.net, www.topwcftutorials.net, and www.sharepointfordummies.net.