Вызовите один и тот же метод для всех активных экземпляров службы без сохранения состояния.

Как лучше всего вызвать один и тот же метод для всех активных экземпляров службы без сохранения состояния в SFC? Я имею в виду выполнение чего-то подобного приведенному ниже, только для ВСЕХ активных экземпляров:

var service = ServiceProxy.Create<IMyService>("<my-service-uri>");
await service.MyServiceMethod();

person filip    schedule 09.07.2018    source источник
comment
Что вы подразумеваете под вызовом метода? Вы пытаетесь сделать удаленный вызов службы или говорите о HTTP-вызове?   -  person Oleg Karasik    schedule 09.07.2018
comment
Я имею в виду удаленный вызов для каждого активного экземпляра. Вопрос расширен, чтобы предоставить более подробную информацию.   -  person filip    schedule 09.07.2018


Ответы (1)


К сожалению, похоже, что нет возможности отправить запрос на удаленное взаимодействие конкретному экземпляру/реплике службы.

According to the documentation of ServiceProxy.Create существует очень ограниченный контроль над выбором целевого экземпляра/реплики (он строго соответствует TargetReplicaSelector).

person Oleg Karasik    schedule 09.07.2018
comment
Я надеялся, что смогу получить список всех экземпляров так же, как я могу перебирать узлы, разделы и т. д., используя FabricClient и ServicePartitionResolver. Затем я вызывал метод, используя удаленное взаимодействие один за другим. Мне, вероятно, нужно будет использовать что-то еще, кроме обычного класса ServiceProxy... - person filip; 09.07.2018
comment
@filip, насколько я знаю, невозможно общаться с помощью удаленного взаимодействия без ServiceProxy. Если вы найдете способ, вот код для получения информации о каждой реплике (включая ее идентификатор и многое другое) - var client = new FabricClient(); foreach (var partition in await client.QueryManager.GetPartitionListAsync(new Uri("<service-name>"))) { foreach (var replica in await client.QueryManager.GetReplicaListAsync(partition.PartitionInformation.Id)) { // Here you have replica information } } - person Oleg Karasik; 09.07.2018