Да, это возможно, если вы пишете прокси-клиент WCF вручную, а не генерируете его автоматически с помощью Visual Studio, добавляя ссылку на службу.
Давайте начнем с этого примера (https://docs.microsoft.com/it-it/dotnet/framework/wcf/feature-details/how-to-use-the-channelfactory),, просто чтобы понять, как работает ChannelFactory, а затем немного изменим его, добавив следующую функцию.
private ChannelFactory<IMath> _myChannelFactory;
// ...
private IMath GetChannel(string endpointConfigurationName, string endpointAddress)
{
if (_myChannelFactory == null)
{
this.DebugLog("Channel factory is null, creating new one");
if (String.IsNullOrEmpty(endpointAddress))
{
_myChannelFactory = new ChannelFactory<IMath>(endpointConfigurationName);
}
else
{
_myChannelFactory = new ChannelFactory<IMath>(endpointConfigurationName, new EndpointAddress(endpointAddress));
}
}
return _myChannelFactory.CreateChannel();
}
Вы можете определитьIP-адрес сервера по умолчанию в клиентском файле App.config
<system.serviceModel>
<!-- ... -->
<client>
<endpoint address="net.tcp://192.168.10.55:81/math/" binding="netTcpBinding"
bindingConfiguration="NetTcpBinding_IMath"
contract="MyNamespace.IMath" name="NetTcpBinding_IMath" />
</client>
</system.serviceModel>
Таким образом, когда вызывается GetChannel("NetTcpBinding_IMath", "net.tcp://127.0.0.1:81/math")
, он выбирает конфигурацию конечной точки из файла App.config, заменяя адрес по умолчанию (192.168.10.55) с новым (127.0.0.1).
Еще немного документации о ChannelFactory: https://docs.microsoft.com/en-us/dotnet/api/system.servicemodel.channelfactory-1.createchannel?view=netframework-4.8