динамически установить базовый адрес службы WCF на клиенте - PullRequest
1 голос
/ 13 июня 2019

Я создал сервисную библиотеку WCF и разместил ее через хост-приложение. Затем я создал клиентское приложение, но кажется, что адрес хоста службы жестко задан в клиентской программе. Что если хост меняет свой адрес? Можно ли написать клиентское приложение, чтобы клиент мог вводить адрес хоста во время выполнения?

1 Ответ

1 голос
/ 13 июня 2019

Да, это возможно, если вы пишете прокси-клиент 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

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