Configurazione client WCF: come posso verificare se l'endpoint è nel file di configurazione e, in caso contrario, fallback in codice?

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

Domanda

Cercando di creare un client che rimanda oggetti messaggio serializzati a un server tramite WCF.

Per rendere le cose più facili per lo sviluppatore finale (diversi dipartimenti) sarebbe meglio che non avessero bisogno di sapere come modificare il loro file di configurazione per impostare i dati dell'end point del client.

Detto questo, sarebbe anche geniale che l'endpoint non fosse incorporato / codificato nel client.

Uno scenario misto mi sembra la soluzione più semplice da implementare:

IF (descritto in config) UTILIZZARE il file di configurazione ELSE fallback su endpoint con codifica rigida.

Quello che ho scoperto è:

  1. new Client (); ha esito negativo se non viene trovata alcuna definizione del file di configurazione.
  2. nuovo client (binding, endpoint); funziona

dunque:

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

Ma c'è un modo per controllare (oltre a try / catch) per vedere se il file di configurazione ha un endpoint dichiarato?

Quanto sopra non fallirebbe anche se definito nel file di configurazione, ma non configurato correttamente? Sarebbe bello distinguere tra le due condizioni?

È stato utile?

Soluzione

ecco il modo per leggere il file di configurazione e caricare i dati in un oggetto facile da gestire:

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

La "quot" cs " L'oggetto esporrà una raccolta denominata "endpoint" che ti consente di accedere a tutte le proprietà che trovi nel file di configurazione.

Assicurati di trattare anche " else " rami di "if" e li trattano come casi di errore (la configurazione non è valida).

Altri suggerimenti

Vorrei proporre una versione migliorata della AlexDrenea , che utilizza solo tipi speciali per le sezioni di configurazione.

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

        }
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top