Связь с контейнерным сервисом WCF в сервисной фабрике - PullRequest
0 голосов
/ 05 июля 2018

У меня есть контейнер, работающий в SF. Служба WCF работает внутри контейнера на порту 7777 и привязана к хосту на том же порту.

Я написал второй сервис SF и развернул его в кластере. Я использовал WCFComuunicationClientFactory для связи со службой WCF, работающей внутри контейнера.

Однако я получаю исключение типа: EndPointNotFoundException для uri: net.tcp: //MyPc.XXX.com: 7777 /. Это имеет смысл, поскольку контракты раскрываются следующим образом: net.tcp: //MyPc.XXX.com: 7777 / ContractType.

Как я могу заставить это работать? Я прилагаю код службы, пытающейся связаться с контейнером:

 var wcfClientFactory = new WcfCommunicationClientFactory<MyContractService>(
         clientBinding: binding, 
         servicePartitionResolver: partitionResolver
     );

 var newClient = wcfClientFactory.GetClientAsync(
         new Uri("fabric:/MyContainerService"), 
         ServicePartitionKey.Singleton,
         TargetReplicaSelector.Default, 
         null, 
         new OperationRetrySettings(), 
         CancellationToken.None
     ).Result;

 var x = newClient.Channel.GetX();

при доступе к GetX я получаю исключение для конечной точки.

1 Ответ

0 голосов
/ 09 июля 2018

Решение находится внутри определения конечной точки контейнера в файле serviceManifest.xml сервисной фабрики.

Можно добавить pathSuffix, например:

<Endpoint Name="MyEndPoint" UriScheme="net.tcp" Port="3000" Protocol="tcp" PathSuffix="YourService" />

Это приведет к следующей конечной точке:

net.tcp://<host>:3000/YourService

Обратите внимание, что вы можете иметь столько конечных точек, сколько вам нужно, и чтобы выбрать одну из клиентов, обращающихся к службе внутри контейнера, вы должны указать параметр: 'listenerName' при создании ServicePartitionClient, который представляет вашу конечную точку имя.

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