在 Service fabric 中与容器化 WCF 服务通信

Communicating with containerized WCF service in Service fabric

我在顺丰有一个货柜运行。 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' 时,我得到端点异常。

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

可以添加路径后缀,如下所示:

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

这将导致以下终点:

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

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