Конфигурация клиента WCF — перенаправление нескольких служб на другой хост

Прямо сейчас у меня есть несколько служб в моем клиенте web.config, например:

<endpoint address="http://hostname/ServiceA.svc"
         binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_MyBinding"
         contract="ServiceReference.ISearchService" name="ServiceA">
</endpoint>

<endpoint address="http://hostname/ServiceB.svc"
         binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_MyBinding"
         contract="ServiceReference.ISearchService" name="ServiceB">
</endpoint>

и еще немного

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

Я хочу каким-то образом добавить параметр приложения среды или что-то еще, что позволит мне указать хост и разрешить конечную точку, например http://{hostA}/ServiceX.svc

Нужно ли мне делать магию программно или я могу сделать это только из конфигурации?


person lurscher    schedule 03.08.2011    source источник


Ответы (1)


Вам нужно будет сделать это с помощью кода — в конфигурации нет «подстановочного знака», который вы можете использовать для базового адреса в разделе <system.serviceModel / client>. Однако вы можете иметь некоторый заполнитель в конфигурации (например, «localhost») и в коде сначала загрузить конфигурацию, а затем обновить имя сервера с фактическим значением (которое также может быть сохранено в конфигурации, например, в AppSettings или где-нибудь еще).

var factory = new ChannelFactory<ISearchService>("ServiceA");
factory.Endpoint.Address = ReplaceServerName(factory.Endpoint.Address);
var proxy = factory.CreateChannel();
...
person carlosfigueira    schedule 03.08.2011
comment
+1 да, я думаю, это было бы единственным наполовину управляемым решением для клиентской стороны - очень жаль, что на стороне клиента нет концепции базового адреса... - person marc_s; 04.08.2011