Dynamicznie ustawiany adres punktu końcowego w kliencie wcf (z wiązaniem net tcp)

Nie jestem więc zbytnio zaznajomiony z WCF i wszystkie rzeczy, które przeszedłem, nie pomogły mi osiągnąć tego, czego potrzebuję. Przepraszam, jeśli to głupie pytanie :)

Zasadniczo istnieje aplikacja serwera z usługami udostępnianymi z WCF (wiązanie net tcp). Napisałem nową aplikację konsoli i muszę zadzwonić do serwisu. Mogę to osiągnąć, dodając bibliotekę DLL dla projektu proxy, który mamy i dodając kilka plików konfiguracyjnych (takich jak WCFClientBindings, WCFClientEndPoints). Jeśli używam zdefiniowanego punktu końcowego, mogę wywołać kod w ten sposób:

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

Jednak aplikacja powinna być w stanie wywołać nazwę hosta przekazaną jako argument wiersza poleceń.

Więc podczas gdy moja aplikacja działa ze zdefiniowanym punktem końcowym:

<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>

Muszę być w stanie zaktualizować nazwę hosta localhost, aby był potencjalnie czymś innym. Mam nadzieję, że bezpieczeństwo mnie nie potknie :)

Przykłady, które widziałem, wydają się tworzyć instancję klienta / proxy, przekazując wiązanie „dynamiczne” i adres, ale nasza klasa proxy nie akceptuje tych. Czy nie istnieje sposób na aktualizację adresu punktu końcowego (w czasie wykonywania) przed wywołaniem klasy „proxy”? Jedyne inne przykłady, które widziałem, dotyczyły tworzenia nowej usługi ServiceHost - ale to nie brzmi zbyt dobrze dla klienta :)

Dzięki!

Edytować - OK, oto składnia, która wydaje się dobrze działać. Trochę różni się od odpowiedzi, którą zaakceptowałem, ale takie podejście było dobrym rozwiązaniem :)

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