Как заставить динамически сгенерированный клиент службы .net читать конфигурацию из другого места, чем файлы * .config - PullRequest
1 голос
/ 12 мая 2010

В настоящее время я написал код для использования ServiceContractGenerator для генерации клиентского кода веб-службы на основе wsdl, а затем скомпилировал его в сборку в памяти с использованием кода dom. Затем я использую отражение, чтобы настроить привязку, конечную точку, значения / типы служб, а затем в конечном итоге вызвать метод веб-службы на основе конфигурации xml, которую можно изменить во время выполнения.

Это все в настоящее время работает нормально. Однако проблема, с которой я сейчас сталкиваюсь, заключается в том, что я подключаюсь к нескольким экзотическим веб-службам, для которых требуется множество пользовательских настроек привязки / безопасности. Это вынуждает меня добавлять все больше и больше настроек в мои пользовательские конфигурации xml, а также соответствующие обновления в моем коде, чтобы интерпретировать и устанавливать эти параметры привязки / безопасности в коде.

В конечном счете, это замедляет добавление этих «экзотических» сервисов, и я вижу, что в конечном итоге я заново реализую раздел «system.serviceModel» в файле web или app.config, что никогда не бывает хорошо.

У меня такой вопрос, и здесь мой недостаток опыта .net и C # показывает, есть ли способ определить конфигурацию, обычно находящуюся где-то в разделе web.config или app.config 'system.serviceModel', и во время выполнения предоставить это для конфигурации клиенту веб-службы?

Есть ли способ присоединить файл app.config непосредственно к сборке в качестве ресурса или любой другой способ предоставить эту конфигурацию клиенту?

По сути, я бы хотел присоединить app.config, содержащий только system.serviceModel, к сборке, содержащей клиент веб-службы, чтобы он мог использовать свою конфигурацию. Таким образом, мне не нужно обрабатывать каждую конфигурацию под солнцем, я могу позволить .net сделать это за меня.

Кстати, я не могу поместить конфигурацию для каждой службы в app.config для запущенного приложения.

Любая помощь будет принята с благодарностью.

Заранее спасибо! Bryan

Ответы [ 3 ]

2 голосов
/ 13 мая 2010
  • Создать пользовательский класс, производный от ChannelFactory.
  • Переопределить защищенный Метод CreateDescription. в переопределить, нужно ...
  • Вызовите base.CreateDescription ().
  • Читайте в вашей пользовательской конфигурации.
  • Создание настраиваемой точки ServiceEndpoint на основе на вашей конфигурации. Не забывай привязки, поведение и т. д.
  • Вернуть эту пользовательскую ServiceEndpoint.

Подробнее ЗДЕСЬ

1 голос
/ 12 мая 2010

Следующая пара ссылок говорит о загрузке настроек конфигурации WCF из файлов конфигурации, отличных от app.config.Может быть то, что вы ищете, но не уверены.

http://blogs.msdn.com/dotnetinterop/archive/2008/09/22/custom-service-config-file-for-a-wcf-service-hosted-in-iis.aspx

http://weblogs.asp.net/cibrax/archive/2007/10/19/loading-the-wcf-configuration-from-different-files-on-the-client-side.aspx

1 голос
/ 12 мая 2010

Ваши прокси-классы являются производными от ClientBase<T>? Если это так, то есть конструктор, который принимает Binding и EndpointAddress. Вы должны иметь возможность использовать их вместо соответствующих данных конфигурации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...