如何通过ServicePartitionResolver发现服务提供哪种端点?

问题描述 投票:1回答:1

我正在尝试写一个服务解析器,我正在使用,正如https://docs.microsoft.com/en-us/azure/service-fabric/service-fabric-reliable-services-communication中提到的那样,ServicePartitionResolver

到目前为止,这一切都运作良好。根据我的服务信息,我可以解决这样的服务:

var resolvedService = await ServicePartitionResolver.GetDefault().ResolveAsync(service.ServiceName, key, CancellationToken.None);

现在,为了让我的服务能够相互通信,我正在为第一个读取这样的端点地址,例如:

resolvedService.Endpoints.First().Address

这正确地返回我在OpenAsync实现的ICommunicationListener方法中返回的所需端点。

基本上,只要协议是http,这一切都做得很好。

一旦我将协议切换到类似于请求应该到的服务的ServiceManifest.xml中的tcp之类的内容:

<Endpoints>
  <!-- This endpoint is used by the communication listener to obtain the port on which to 
       listen. Please note that if your service is partitioned, this port is shared with 
       replicas of different partitions that are placed in your code. -->
  <Endpoint Protocol="tcp" Name="ServiceEndpoint" Type="Input" Port="3245" />
</Endpoints>

ServiceResolver仍然将我的终点解析为以http开头的地址。

所以,现在我的问题 - 我只是做错了吗?因为对我而言,我似乎无法真正知道我正在处理的终点。即使这没有直接反映在地址中,我仍然可以从端点字符串中修剪http部分,但是没有信息它也是什么类型的端点。因此,从技术上讲,我可以用空白替换http://,但最好是根据我从Service Fabric返回的内容而不是“因为我了解端点”这样做。

有任何想法吗?

c# azure azure-service-fabric
1个回答
1
投票

清单中的协议定义未使用定义端点。通信侦听器实现从OpenAsync返回端点。所以我建议在那里开始搜索。

更多信息herehere

© www.soinside.com 2019 - 2024. All rights reserved.