Конфигурация клиента WCF: как я могу проверить, находится ли конечная точка в файле конфигурации, и откат к коду, если нет? - PullRequest
11 голосов
/ 18 июня 2009

Нужно сделать так, чтобы Клиент отправлял сериализованные объекты Message обратно на сервер через WCF.

Для конечного разработчика (различных отделов) было бы проще, если бы он не знал об этом.как отредактировать их файл конфигурации для настройки данных конечной точки клиента.

Тем не менее, было бы замечательно, что конечная точка также не была встроена / жестко закодирована в клиенте.

Мне кажется, что сценарий смешивания будет самым простым решением для развертывания:

IF (описано в конфигурации) ИСПОЛЬЗОВАТЬ файл конфигурации ELSE откат к жестко заданной конечной точке.

Что я нашелout is:

  1. new Client(); завершается неудачей, если не найдено определение файла конфигурации.
  2. new Client(binding,endpoint); работает

, поэтому:

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

Но есть ли способ проверить (кроме try / catch), чтобы увидеть, есть ли в конфигурационном файле объявленная конечная точка?

Не вышло бы также и выше, если определено в configфайл, но не настроен правильно?Было бы хорошо провести различие между двумя условиями?

Ответы [ 2 ]

11 голосов
/ 14 апреля 2010

Я хотел бы предложить улучшенную версию решения AlexDrenea , которое использует только специальные типы для разделов конфигурации.

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

        }
8 голосов
/ 18 июня 2009

вот способ прочитать файл конфигурации и загрузить данные в простой в управлении объект:

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

Объект "cs" предоставит коллекцию с именем "endpoints", которая позволяет получить доступ ко всем свойствам, которые вы найдете в файле конфигурации.

Убедитесь, что вы также обрабатываете ветки "else" в "if" и рассматриваете их как случаи сбоя (конфигурация неверна).

...