Freigeben über


Customizing Proxy Configuration

In the past I've written about overriding
ApplyConfiguration on a service
to take control of the configuration
process. There is a similar technique
that you can use for client proxies although getting started is not quite as obvious. I'll talk today about the typed proxies
generated by constructing a ChannelFactory<T>. When you're using ChannelFactory<T>, you
are midway between the tool-based automatic proxy generation and the
channel-based manual proxy construction.
Everything here also applies to the base ChannelFactory if you don't
need the supplied type parameter.

On ChannelFactory there are two interesting methods that you
can override in subclasses.

 protected virtual void ApplyConfiguration(string configurationName);
protected abstract ServiceEndpoint CreateDescription();

ApplyConfiguration is similar in spirit to the ApplyConfiguration
on a service but has a little bit of a different interaction with
CreateDescription. All of the heavy
lifting for building the endpoint (the address, binding, and contract) is done
in CreateDescription. All that is done
in ApplyConfiguration is to load behaviors for the client proxy from
configuration.

Since ApplyConfiguration is not as interesting on the
client, there are going to be more cases where you need to override both
ApplyConfiguration and CreateDescription.
If you only need to fix up the generated proxy, then you may be able to
use the base implementation for both ApplyConfiguration and CreateDescription,
and apply your changes to the description in an override of
ApplyConfiguration. If you want to make
more extensive changes to the configuration or client proxy generation process,
then you're less likely to be able to use the base implementation of
ApplyConfiguration and may need to override CreateDescription as well.

Next time: Pointing to External Metadata

Comments

  • Anonymous
    May 15, 2008
    Extensibility in configuration allows you to call out to types that you define for things such as behaviors,