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

☆樱花仙子☆ 提交于 2019-12-03 09:22:53

问题


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?


回答1:


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).




回答2:


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

        }


来源:https://stackoverflow.com/questions/1009757/wcf-client-configuration-how-can-i-check-if-endpoint-is-in-config-file-and-fal

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!