我正在尝试写一个服务解析器,我正在使用,正如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返回的内容而不是“因为我了解端点”这样做。
有任何想法吗?