Configuration du client WCF: comment puis-je vérifier si le noeud final est dans le fichier de configuration et utiliser le code si ce n'est pas le cas?

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

Question

Vous souhaitez créer un client qui renvoie des objets Message sérialisés à un serveur via WCF.

Pour simplifier les choses pour le développeur final (différents départements), il serait préférable qu'ils n'aient pas besoin de savoir comment éditer leur fichier de configuration pour configurer les données de terminal client.

Cela dit, il serait également génial de ne pas intégrer le système d'extrémité / codé en dur dans le client.

Un scénario mixte me semble être la solution la plus facile à déployer:

IF (décrit dans config), UTILISEZ le fichier de configuration, SAUF repli sur un noeud final codé en dur.

Ce que j'ai découvert est:

  1. new Client (); échoue si aucune définition de fichier de configuration n'a été trouvée.
  2. nouveau client (liaison, noeud final); fonctionne

donc:

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

Mais y a-t-il un moyen de vérifier (autre que try / catch) pour voir si le fichier de configuration a un noeud final déclaré?

Ce qui précède n’échouera-t-il pas également s’il est défini dans le fichier de configuration, mais pas correctement configuré? Serait-il bon de faire la distinction entre les deux conditions?

Était-ce utile?

La solution

Voici le moyen de lire le fichier de configuration et de charger les données dans un objet facile à gérer:

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

Le " cs " object exposera une collection nommée "points de terminaison". qui vous permet d'accéder à toutes les propriétés que vous trouvez dans le fichier de configuration.

Assurez-vous de traiter également le " else " branches de "if" et les traiter comme des cas d'échec (la configuration est invalide).

Autres conseils

Je voudrais proposer une version améliorée de la solution AlexDrenea , qui utilise uniquement des types spéciaux pour les sections de configuration.

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

        }
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top