Конфигурация клиента WCF:как я могу проверить, есть ли конечная точка в файле конфигурации, и вернуться к коду, если нет?

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

Вопрос

Хотите создать клиент, который отправляет сериализованные объекты сообщений обратно на сервер через WCF.

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

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

Сценарий смешивания, на мой взгляд, является самым простым решением для развертывания:

ЕСЛИ (описано в конфигурации), ИСПОЛЬЗУЙТЕ конфигурационный файл ELSE для возврата к жестко закодированной конечной точке.

То, что я выяснил, это:

  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), чтобы узнать, есть ли в файле конфигурации объявленная конечная точка?

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

Это было полезно?

Решение

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

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" предоставит коллекцию с именем "конечные точки", которая позволяет вам получить доступ ко всем свойствам, которые вы найдете в файле конфигурации.

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

Другие советы

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

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

        }
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top