与Service Fabric中的容器化WCF服务进行通信

时间:2018-07-05 08:56:20

标签: c# wcf docker azure-service-fabric

我有一个在SF中运行的容器。 WCF服务正在端口7777的容器内运行,并已绑定到同一端口上的主机。

我已经编写了第二个SF服务并将其部署在集群上。 我已经使用WCFComuunicationClientFactory与容器中运行的WCF服务进行通信。

但是,我在uri上收到类型为EndPointNotFoundException的异常: 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 :(得分:1)

解决方案位于服务结构serviceManifest.xml文件中的容器端点定义内。

可以添加pathSuffix,如下所示:

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

这将导致以下终点:

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

请注意,您可以拥有尽可能多的端点,并且为了从与容器内的服务联系的客户端中选择一个端点,在创建“ ServicePartitionClient”时应指定参数:“ listenerName”,它代表您的EndPoint名称。