Consume webservice from a .NET DLL - app.config problem

Asaf R picture Asaf R · Feb 12, 2010 · Viewed 9.6k times · Source

I'm building a DLL, let's call it mydll.dll, and in it I sometimes need to call methods from webservice, myservice. mydll.dll is built using C# and .NET 3.5.

To consume myservice from mydll I've Added A Service in Visual Studio 2008, which is more or less the same as using svcutil.exe. Doing so creates a class I can create, and adds endpoint and bindings configurations to mydll app.config.

The problem here is that mydll app.config is never loaded. Instead, what's loaded is the app.config or web.config of the program I use mydll in.

I expect mydll to evolve, which is why I've decoupled it's funcionality from the rest of my system to begin with. During that evolution it will likely add more webservice to which it'll call, ruling out manual copy-paste ways to overcome this problem.

I've looked at several possible approaches to attacking this issue:

  1. Manually copy endpoints and bindings from mydell app.config to target EXE or web .config file.
    Couples the modules, not flexible
  2. Include endpoints and bindings from mydll app.config in target .config, using configSource (see here). Also add coupling between modules
  3. Programmatically load mydll app.config, read endpoints and bindings, and instantiate Binding and EndpointAddress.
  4. Use a different tool to create local frontend for myservice

I'm not sure which way to go. Option 3 sounds promising, but as it turns out it's a lot of work and will probably introduce several bugs, so it doubtfully pays off. I'm also not familiar with any tool other than the canonical svcutil.exe.

Please either give pros and cons for the above alternative, provide tips for implementing any of them, or suggest other approaches.

Thanks,
Asaf

Answer

Restuta picture Restuta · Feb 12, 2010

I prefer option 5 - "In code configuration", yes yes yes, you lose change-without-recompile benefit, but in depends on what you need. If you know that you will never change your endpoints or will change it rarely - just do your configuration in code, you will get compile time checking as a bonus =) This and this can help.

And btw, configuration in client configs is a common case, if you have a lot of this clients this can be pain and you should think about 3 or 5 =)