Я хотел бы сохранить конфигурации конечных точек в файле .config, но иметь возможность изменять базовый адрес во время выполнения. EG: это мои определения конечных точек в app.config:
<endpoint address="net.tcp://BASEURI:1001/FooService/"
binding="netTcpBinding" bindingConfiguration="NetTcpBinding_Common"
contract="ServiceContracts.MyService"
name="FooService" />
<endpoint address="net.tcp://BASEURI:1002/BarService/"
binding="netTcpBinding" bindingConfiguration="NetTcpBinding_Special"
contract="ServiceContracts.MyService"
name="BarService" />
Каждый сервис использует один и тот же контракт (ServiceContracts.MyService
), но работает на другом порту, на другом пути, а иногда и на другой конфигурации привязки.
Я хочу иметь возможность программно извлекать адрес "net.tcp: // BASEURI / FooService /", заменять "BASEURI" на адрес сервера, а затем передавать его в качестве адреса DuplexChannelFactory при подключении клиента создано. EG:
string ServiceToUse = "FooService";
var endpointConfig = SomeFunctionThatGetsTheConfig(ServiceToUse);
string trueAddress = endpointConfig.Address.Replace("BASEURI", "192.168.0.1");
DuplexChannelFactory<FooService> client =
new DuplexChannelFactory<FooService>(ServiceToUse, new EndpointAddress(trueAddress));
Я знаю, что клиентские конечные точки не поддерживают функцию конечных точек службы, но моя цель - как-то обойти это, чтобы мне не нужно было знать, что остальные URI или привязка.
Примечание: я не использую класс Proxy, я использую DuplexChannelFactory напрямую.