Установите другой файл конфигурации для прокси - PullRequest
0 голосов
/ 11 июня 2009

У меня есть клиент WCF, сгенерированный с помощью Add Service Reference, проблема в том, что классы этого клиента будут встроены в MSI (проект WIX) вместе с его файлом конфигурации. Из msi прокси не распознает файл конфигурации. Я хочу взять конфигурационный файл за пределами MSI и сказать прокси, чтобы прочитать, что ему нужно оттуда.

Есть ли способ добиться этого? Скажите прокси, чтобы получить данные из другого конфига, отличного от используемого по умолчанию?

Некоторые идеи или примеры были бы великолепны.

Спасибо, Adriana

Ответы [ 2 ]

0 голосов
/ 12 июня 2009

Вот как я это сделал: По ссылке, которую дал мне Васу, из примера я добавил CustomClientChannel в свой проект. Я нашел 2 ошибки, хотя: - если в настройке прокси нет поведения - Если в файле конфигурации несколько конечных точек, каждая из которых имеет свою привязку, она всегда принимает первую привязку независимо от конечной точки.

Исправлено так:

//in CreateDescription() modify

if (serviceEndpoint.Binding == null)

               {

                   serviceEndpoint.Binding = CreateBinding(selectedEndpoint.Binding, selectedEndpoint.BindingConfiguration, serviceModeGroup);

               }

...

  if (serviceEndpoint.Behaviors.Count == 0 && !String.IsNullOrEmpty(selectedEndpoint.BehaviorConfiguration))

               {

                   AddBehaviors(selectedEndpoint.BehaviorConfiguration, serviceEndpoint, serviceModeGroup);

               }

  /// <summary>

       /// Configures the binding for the selected endpoint

       /// </summary>

       /// <param name="bindingName"></param>

       /// <param name="group"></param>

       /// <returns></returns>

       private Binding CreateBinding(string bindingName, string bindingConfiguration, ServiceModelSectionGroup group)

       {

           IBindingConfigurationElement be = null;

           BindingCollectionElement bindingElementCollection = group.Bindings[bindingName];

           if (bindingElementCollection.ConfiguredBindings.Count > 0)

           {

               foreach (IBindingConfigurationElement bindingElem in bindingElementCollection.ConfiguredBindings)

               {

                   if (string.Compare(bindingElem.Name, bindingConfiguration) == 0)

                   {

                       be = bindingElem;

                       break;

                   }

               }

               Binding binding = null;

               if (be != null)

               {

                   binding = GetBinding(be);

                   be.ApplyConfiguration(binding);

               }

               return binding;

           }

           return null;

       }
0 голосов
/ 11 июня 2009

Мы сделали это путем создания собственной ChannelFactory и переопределения метода CreateDescription. Затем вы можете создать свой прокси с помощью

var lProxy = (IClientChannel)mYourChannelFactory.CreateChannel();
lProxy.Open()

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

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