Динамически устанавливаемый адрес конечной точки в клиенте wcf (с привязкой по протоколу net tcp)
Таким образом, я не слишком знаком с WCF и всеми вещами, которые я гуглил, не помог мне с тем, как достичь того, что мне нужно. Извините, если это глупый вопрос :)
В основном есть серверное приложение со службами, предоставляемыми с помощью WCF (связывание по протоколу net tcp). Я написал новое консольное приложение, и мне нужно вызвать службу. Таким образом, я могу добиться этого, добавив dll для нашего прокси-проекта и добавив кучу файлов конфигурации (таких как WCFClientBindings, WCFClientEndPoints). Если я использую определенную конечную точку, я могу вызвать код следующим образом:
using (var partyProxy = new PartyControllerProxy())
{
// execute server method
partyProfile = partyProxy.GetLatestPartyProfile(context, parsedParameters.PartyId);
}
Однако предполагается, что приложение сможет вызывать имя хоста, которое передается в качестве аргумента командной строки.
Итак, пока мое приложение работает с определенной конечной точкой:
<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>
Я должен быть в состоянии обновить имя хоста localhost, чтобы потенциально быть чем-то другим. Надеюсь, что безопасность не сбивает меня с толку :)
Примеры, которые я видел, похоже, создают экземпляр клиента / прокси, передавая "динамический". привязка и адрес, но наш прокси-класс не принимает их. Нет ли способа обновить адрес конечной точки (во время выполнения) перед вызовом «прокси»? учебный класс ? Единственные другие примеры, которые я видел, были связаны с созданием нового ServiceHost, но это не очень подходит для клиента :)
Спасибо!
Edit - Хорошо, вот синтаксис, который, кажется, работает хорошо. Это немного отличается от ответа, который я принял, но такой подход был подходом :)
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();
}