Configuração do cliente WCF: como posso verificar se o endpoint está no arquivo de configuração e no fallback do código, se não?

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

Pergunta

Procurando fazer um cliente que envie objetos de mensagem serializada de volta a um servidor via WCF.

Para facilitar as coisas para o desenvolvedor final (departamentos diferentes) que eles não precisavam saber como editar seu arquivo de configuração para configurar os dados do ponto final do cliente.

Dito isto, também seria brilhante que o endpoint também não estivesse incorporado/codificado no cliente.

Um cenário de mistura parece -me a solução mais fácil de lançar:

Se (descrito na configuração) use o arquivo de configuração mais fallback no terminal codificado.

O que eu descobri é:

  1. new Client(); falha se nenhuma definição de arquivo de configuração foi encontrada.
  2. new Client(binding,endpoint); funciona

Portanto:

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

Mas existe alguma maneira de Verifica (exceto tentar/capturar) para ver se o arquivo de configuração tem um terminal declarado?

O acima não falhará tão bem se definido no arquivo de configuração, mas não configurado, certo? Seria bom distinguir entre as duas condições?

Foi útil?

Solução

Aqui está a maneira de ler o arquivo de configuração e carregar os dados em um objeto fácil de gerenciar:

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

O objeto "CS" exporá uma coleção chamada "terminais" que permite acessar todas as propriedades que você encontra no arquivo de configuração.

Certifique -se de tratar também os ramos "else" dos "se" e os trate como casos de falha (a configuração é inválida).

Outras dicas

Eu gostaria de propor a versão aprimorada de Alexdrenea Solução, que usa apenas tipos especiais para seções de configuração.

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 em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top