WCF Client Configuration: how can I check if endpoint is in config file, and fallback to code if not?

StackOverflow https://stackoverflow.com/questions/1009757

Question

Looking to make a Client that sends serialized Message objects back to a server via WCF.

To make things easy for the end-developer (different departments) would be best that they didn't need to know how to edit their config file to set up the client end point data.

That said, would also be brilliant that the endpoint wasn't embedded/hard-coded into the Client either.

A mix scenario would appear to me to be the easiest solution to roll out:

IF (described in config) USE config file ELSE fallback to hard-coded endpoint.

What I've found out is:

  1. new Client(); fails if no config file definition found.
  2. new Client(binding,endpoint); works

therefore:

Client client;
try {
  client = new Client();
}catch {
  //Guess not defined in config file...
  //fall back to hard coded solution:
  client(binding, endpoint)
}

But is there any way to check (other than try/catch) to see if config file has an endpoint declared?

Would the above not fail as well if defined in config file, but not configured right? Would be good to distinguish between the two conditions?

Was it helpful?

Solution

here is the way to read the configuration file and load the data into an easy to manage object:

Configuration c = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
ConfigurationSectionGroup csg = c.GetSectionGroup("system.serviceModel");
if (csg != null)
{
    ConfigurationSection css = csg.Sections["client"];
    if (css != null && css is ClientSection)
    {
        ClientSection cs = (ClientSection)csg.Sections["client"];
        //make all your tests about the correcteness of the endpoints here
    }
}

The "cs" object will expose a collection named "endpoints" that allows you to access all the properties that you find in the config file.

Make sure you also treat the "else" branches of the "if"s and treat them as fail cases (configuration is invalid).

OTHER TIPS

I would like to propose improved version of AlexDrenea solution, that uses only special types for configuration sections.

Configuration configuration = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
        ServiceModelSectionGroup serviceModelGroup = ServiceModelSectionGroup.GetSectionGroup(configuration);
        if (serviceModelGroup != null)
        {
            ClientSection clientSection = serviceModelGroup.Client;
            //make all your tests about the correcteness of the endpoints here

        }
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top