Configuración del cliente WCF: ¿cómo puedo verificar si el punto final está en el archivo de configuración y volver al código si no?

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

Pregunta

Buscando hacer un Cliente que envíe objetos de Mensaje serializados de vuelta a un servidor a través de WCF.

Para facilitar las cosas al desarrollador final (diferentes departamentos) sería mejor que no necesitaran saber cómo editar su archivo de configuración para configurar los datos del punto final del cliente.

Dicho esto, también sería brillante que el punto final tampoco estuviera incrustado / codificado en el Cliente.

Un escenario mixto me parece la solución más fácil de implementar:

IF (descrito en la configuración) USE el archivo de configuración ELSE alternativa al punto final codificado.

Lo que he descubierto es:

  1. new Client (); falla si no se encuentra la definición del archivo de configuración.
  2. nuevo Cliente (enlace, punto final); funciona

por lo tanto:

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

¿Pero hay alguna forma de verificar (que no sea try / catch) para ver si el archivo de configuración tiene un punto final declarado?

¿No fallaría lo anterior también si se define en el archivo de configuración, pero no se configura correctamente? ¿Sería bueno distinguir entre las dos condiciones?

¿Fue útil?

Solución

aquí está la forma de leer el archivo de configuración y cargar los datos en un objeto fácil de administrar:

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
    }
}

El " cs " el objeto expondrá una colección llamada " puntos finales " que le permite acceder a todas las propiedades que encuentre en el archivo de configuración.

Asegúrate de tratar también el '' else '' ramas de los " if " sy tratarlos como casos fallidos (la configuración no es válida).

Otros consejos

Me gustaría proponer una versión mejorada de la solución AlexDrenea , que utiliza solo tipos especiales para las secciones de configuración.

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

        }
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top