Click here to Skip to main content
14,689,466 members
Articles » Platforms, Frameworks & Libraries » Windows Communication Foundation » General
Posted 11 Apr 2014

Tagged as


8 bookmarked

Dynamic Generation of Client Proxy at Runtime in WCF using a Single Factory

Rate me:
Please Sign up or sign in to vote.
3.94/5 (8 votes)
11 Apr 2014CPOL
Dynamic Generation of Client Proxy at Runtime in WCF using a Single Factory


In conventional method, if client proxy for a WCF service is required to be generated at runtime programmatically, an instance of ChannelFactory (generic type) is created passing the interface type of the service (contract) as parameter to the generic class. This requires different implementation for different services for generating client proxy which reduces the generic scope.

This article describes a method to create a factory class which generates client proxy at runtime from the type of the service contract received as parameter. This will eliminate separate implementation requirement by using a single factory class with the help of .NET reflection.


For example, we have the following Service and Service Contract for a WCF service:

interface IMyService
    void DoSomething();

public class MyService : IMyService
    public void DoSomething()
        // do something

Conventional Method of Client Proxy Generation at Runtime

To generate client proxy in conventional method is to create the ChannelFactory with a prior knowledge of Service contract and this will require separate implementation for each service in the system:

public class Test
    public void Test()
        BasicHttpBinding myBinding = new BasicHttpBinding();
        EndpointAddress myEndpoint = new EndpointAddress("http://localhost/MyService/");
        ChannelFactory<imyservice> myChannelFactory = new ChannelFactory<imyservice>(myBinding, myEndpoint);
        IMyService pClient = myChannelFactory.CreateChannel();

Factory Method of Client Proxy Generation at Runtime

The following method will eliminate the above deficiency by providing a client factory class. This will help in generating client proxy in a more generic way using the single factory:

public class Test
    public void Test()
        //create client proxy from factory
        IMyService pClient = (IMyService)ClientFactory.CreateClient(typeof(IMyService));
//Factory class for client proxy
public abstract class ClientFactory
    public static object CreateClient(Type targetType)
        BasicHttpBinding binding = new BasicHttpBinding();
        //Get the address of the service from configuration or some other mechanism - Not shown here
        EndpointAddress addess = new EndpointAddress(GetAddessFromConfig(targetType));
        //dynamic factory generation
        object factory = Activator.CreateInstance(typeof
        (ChannelFactory<>).MakeGenericType(targetType), binding, address);
        MethodInfo createFactory = factory.GetType().GetMethod("CreateChannel", new Type[] { });
        //now dynamic proxy generation using reflection
        return createFactory.Invoke(factory, null);


This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


About the Author

Krishnendu Ghosh
Software Developer Microsoft
India India
No Biography provided

Comments and Discussions

SuggestionThis is refactoring not dynamic client proxy generation Pin
tinu7319-Dec-15 0:11
Membertinu7319-Dec-15 0:11 
SuggestionInclusion of Method Pin
stixoffire2-Nov-15 11:22
Memberstixoffire2-Nov-15 11:22 
QuestionDo I need to add a reference to the assembly of the service project? Pin
abhi_here2-Feb-15 5:55
Memberabhi_here2-Feb-15 5:55 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.