Definir dinamicamente o endereço do terminal no cliente wcf (com ligação net tcp)

Então eu não estou muito familiarizado com o WCF e todas as coisas que eu pesquisei não me ajudaram a conseguir o que eu preciso. Desculpe se essa é uma pergunta boba :)

Basicamente, há um aplicativo de servidor com serviços expostos com o WCF (net tcp binding). Eu escrevi um novo aplicativo de console e preciso chamar o serviço. Então eu posso conseguir isso adicionando uma dll para o projeto de proxy que temos e adicionando um monte de arquivos de configuração (como WCFClientBindings, WCFClientEndPoints). Se eu usar um ponto final definido, então eu posso chamar o código assim:

using (var partyProxy = new PartyControllerProxy())
            {
                // execute server method 
                partyProfile = partyProxy.GetLatestPartyProfile(context, parsedParameters.PartyId);
            }

No entanto, o aplicativo deve poder chamar o nome do host que é passado como um argumento de linha de comando.

Então, enquanto meu aplicativo funciona com um endpoint definido:

<client>
  <endpoint
  name="IPartyControllerEndpoint"
  address="net.tcp://localhost:46000/ServiceInterface/PartyController.svc"
  binding="customBinding" bindingConfiguration="DefaultNetTcpBindingConfiguration"
  contract="CompanyA.Service.Product.Core.Contracts.IPartyController"
  behaviorConfiguration="DefaultEndpointBehavior">
  </endpoint>
</client>

Eu preciso ser capaz de atualizar o nome do host localhost para ser potencialmente algo mais. Estou esperando que a segurança não me engane :)

Os exemplos que vi parecem instanciar o cliente / proxy passando a ligação e o endereço "dinâmicos", mas nossa classe de proxy não os aceita. Existe uma maneira de atualizar o endereço do nó de extremidade (em tempo de execução) antes de chamar a classe "proxy"? Os únicos outros exemplos que vi envolveram instanciar um novo ServiceHost - mas isso não parece muito apropriado para o cliente :)

Obrigado!

Editar - OK, aqui está a sintaxe que parece funcionar bem. É um pouco diferente da resposta que aceitei, mas essa abordagem foi o caminho a seguir :)

using (ChannelFactory<IPartyController> factory = new ChannelFactory<IPartyController>("IPartyControllerEndpoint"))
        {
            EndpointAddress address = new EndpointAddress(String.Format("net.tcp://{0}/ServiceInterface/PartyController.svc", parsedParameters.HostName));
            IPartyController channel = factory.CreateChannel(address);

            partyProfile = channel.GetLatestPartyProfile(context, parsedParameters.PartyId);
            ((IClientChannel)channel).Close();
        }

questionAnswers(1)

yourAnswerToTheQuestion