WCF -Client -Konfiguration: Wie kann ich überprüfen, ob Endpoint in der Konfigurationsdatei liegt, und fallback zu codieren, wenn nicht?

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

Frage

Ich möchte einen Client erstellen, der serialisierte Nachrichtenobjekte über WCF an einen Server zurücksendet.

Um dem Endentwickler (verschiedene Abteilungen) die Dinge zu erleichtern, ist das Beste, dass er nicht wissen musste, wie sie ihre Konfigurationsdatei bearbeiten, um die Client-Endpunktdaten einzurichten.

Das heißt, wäre auch brillant, dass der Endpunkt auch nicht in den Kunden eingebettet/hartcodiert war.

Ein Mix -Szenario scheint mir die einfachste Lösung zu sein, um herauszukommen:

Wenn (in Config beschrieben) Konfigurationsdatei sonst fallback zum hartcodierten Endpunkt.

Was ich herausgefunden habe ist:

  1. new Client(); fällt fehl, wenn keine Konfigurationsdateidefinition gefunden wurde.
  2. new Client(binding,endpoint); Arbeiten

deshalb:

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

Aber gibt es irgendeine Möglichkeit zu überprüfen (Außer Try/Catch), um festzustellen, ob die Konfigurationsdatei einen Endpunkt deklariert hat?

Würde das obige nicht auch fehlschlagen, wenn sie in der Konfigurationsdatei definiert, aber nicht richtig konfiguriert werden? Wäre es gut, zwischen den beiden Bedingungen zu unterscheiden?

War es hilfreich?

Lösung

Hier ist die Möglichkeit, die Konfigurationsdatei zu lesen und die Daten in ein einfach zu verwaltendes Objekt zu laden:

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

Das "CS" -Objekt enthält eine Sammlung mit dem Namen "Endpunkte", mit der Sie auf alle Eigenschaften zugreifen können, die Sie in der Konfigurationsdatei finden.

Stellen Sie sicher, dass Sie auch die "else" -Diente der "if" s behandeln und sie als Fehlerfälle behandeln (Konfiguration ist ungültig).

Andere Tipps

Ich möchte eine verbesserte Version von vorschlagen Alexdrenea Lösung, die nur spezielle Typen für Konfigurationsabschnitte verwendet.

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

        }
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top