I\'ve got a Windows Service that makes use of a plugin system. I\'m using the following code in the plugin base class to provide a separate configuration per DLL (so it\'ll rea
There are 2 options.
Option 1. Working with channels.
If you are working with channels directly, .NET 4.0 and .NET 4.5 has the ConfigurationChannelFactory. The example on MSDN looks like this:
ExeConfigurationFileMap fileMap = new ExeConfigurationFileMap();
fileMap.ExeConfigFilename = "Test.config";
Configuration newConfiguration = ConfigurationManager.OpenMappedExeConfiguration(
fileMap,
ConfigurationUserLevel.None);
ConfigurationChannelFactory<ICalculatorChannel> factory1 =
new ConfigurationChannelFactory<ICalculatorChannel>(
"endpoint1",
newConfiguration,
new EndpointAddress("http://localhost:8000/servicemodelsamples/service"));
ICalculatorChannel client1 = factory1.CreateChannel();
As pointed out by Langdon, you can use the endpoint address from the configuration file by simply passing in null, like this:
var factory1 = new ConfigurationChannelFactory<ICalculatorChannel>(
"endpoint1",
newConfiguration,
null);
ICalculatorChannel client1 = factory1.CreateChannel();
This is discussed in the MSDN documentation.
Option 2. Working with proxies.
If you're working with code-generated proxies, you can read the config file and load a ServiceModelSectionGroup. There is a bit more work involved than simply using the ConfigurationChannelFactory
but at least you can continue using the generated proxy (that under the hood uses a ChannelFactory
and manages the IChannelFactory
for you.
Pablo Cibraro shows a nice example of this here: Getting WCF Bindings and Behaviors from any config source
Use a separate AppDomain for each plugin. When you create the AppDomain you can specify a new configuration file.
See http://msdn.microsoft.com/en-us/library/system.appdomainsetup.configurationfile.aspx
Here's a solution I found to my 2nd question... someone put the work in to read all the data from ServiceModelSectionGroup
and create a ChannelFactory
.
http://weblogs.asp.net/cibrax/archive/2007/10/19/loading-the-wcf-configuration-from-different-files-on-the-client-side.aspx
I'll be using Richard's solution though, as it seems much cleaner.