Как я могу узнать, какие конечные точки сервис предлагает с ServicePartitionResolver? - PullRequest
1 голос
/ 19 апреля 2019

Я пытаюсь написать решатель служб и для этого я в настоящее время использую, как указано в 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);

Теперь, чтобы мои сервисы могли общаться друг с другом, я читаю адрес конечной точки, например, для первого, например ::100100

resolvedService.Endpoints.First().Address

Это правильно возвращает требуемую конечную точку, которую я возвратил в методе OpenAsync моей реализации ICommunicationListener.

По сути, все это прекрасно работает, если протокол http.

Как только я переключаю протокол на что-то вроде, например, tcp в моем ServiceManifest.xml службы, куда должен идти запрос:

<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 still разрешает мою конечную точку по адресу, начинающемуся с http.

Итак, теперь мой вопрос - я просто что-то делаю не так? Потому что мне кажется, что я не могу точно знать, с какой конечной точкой я имею дело. Даже если это не отражено непосредственно в адресе, я все равно мог бы просто обрезать часть http из строки конечной точки, но нет никакой информации, что это за конечная точка. Таким образом, технически я могу заменить http:// пустым, но было бы предпочтительно сделать это на основе того, что я получаю из Service Fabric, а не «потому что я знаю о конечной точке».

Есть идеи?

1 Ответ

1 голос
/ 19 апреля 2019

Определение протокола из манифеста не используется для определения конечной точки.Реализация прослушивателя связи возвращает конечную точку из OpenAsync.Поэтому я бы порекомендовал начать поиск там.

Подробнее здесь и здесь .

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