Définir dynamiquement adresse de point de terminaison dans wcf client (net tcp de liaison)

Donc je ne suis pas trop familier avec WCF et toutes les choses que je ai googlé n'a pas aidé moi avec la façon d'obtenir ce dont j'ai besoin. Désolé si c'est une question stupide 🙂

Fondamentalement, il ya une application de serveur avec les services exposés avec WCF (net tcp de liaison). J'ai écrit une nouvelle application de console et j'ai besoin d'appeler le service. Afin que je puisse réaliser ce par l'ajout d'un fichier dll pour le proxy projet de nous avons et en ajoutant un tas de fichiers de configuration (comme WCFClientBindings, WCFClientEndPoints). Si j'utilise une fin définie point alors je peux appeler un code comme ceci:

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

Cependant l'application est censé être en mesure d'appeler le nom d'hôte qui est passé en argument de ligne de commande.

Ainsi, tandis que mon application fonctionne avec un effet défini:

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

J'ai besoin d'être en mesure de mettre à jour le nom d'hôte localhost, qui pourrait être quelque chose d'autre. J'espère que la sécurité n'a pas de voyage que moi 🙂

Les exemples que j'ai vu semblent instancier le client/proxy en passant par la "dynamique" de la liaison et de l'adresse, mais notre classe proxy ne l'accepte pas. N'est-il pas un moyen de mettre à jour l'adresse du terminal (à l'exécution) avant d'appeler le "proxy" de la classe ? Les seuls autres exemples que j'ai vu ont participé à l'instanciation d'une nouvelle ServiceHost - mais ça ne me semble pas très approprié pour le client 🙂

Merci!

Edit - OK voici la syntaxe qui semble fonctionner à merveille. C'est un peu différent pour la réponse j'ai accepté, mais cette approche était la voie à suivre 🙂

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();
        }

OriginalL'auteur Jen | 2012-08-31