Нет конечной точки не найдено для сервиса «{serviceB}» раздела «{GUID}», что соответствует указанному TargetReplicaSelector: «RandomSecondaryReplica»TargetReplicaSelector RandomSecondaryReplica конечная точка не найдена
Это ошибка, которая не всегда проявляла, но это иногда.
Я звоню в службу поддержки состояния B из другой службы с сохранением состояния A, с обслуживанием, запрашивающим случайную вторичную реплику, для доступа к состоянию, записанному в первичный.
В проводнике я вижу, что раздел существует и показывает ОК, и у него есть первичный и два ActiveSecondaries.
Служба B имеет следующие:
protected override IEnumerable<ServiceReplicaListener> CreateServiceReplicaListeners()
{
return new[] { new ServiceReplicaListener(context =>
this.CreateServiceRemotingListener(context), listenOnSecondary: true) };
}
Я получаю все разделы этим:
return Enumerable.Range(0, PartitionConstants.Partitions).Select(x =>
ServiceProxy.Create<IServiceB>(
ServiceBUri,
new ServicePartitionKey(x),
TargetReplicaSelector.RandomSecondaryReplica));
И общие настройки должны быть в порядке, так как иногда это работает. И я знаю, что основной ответ отвечает, потому что я сохранил состояние там.
Итак, что может вызвать эту ошибку, когда я действительно смогу увидеть раздел там со вторичными репликами?
Обновление1: Перезапуск службы вызова сделал работу подключения. Но они начали вместе, и после того, как они работали и работали, проблема продолжалась до тех пор, пока я не возобновил работу. Как так?
Update2: Это происходит, когда начинается весь кластер. При запуске первичные ресурсы службы A назовут приоритеты обслуживания B для некоторой регистрации. Опрос B, чтобы знать, что он начал свое внутреннее состояние, прежде чем делать это.
Затем, когда это будет завершено, служба A продолжит проверять, нуждается ли его внутреннее состояние, и если это так, он снова вызовет службу B для извлечения состояния. Поскольку он не будет записывать в состояние B, он вызывает вторичные реплики. И вот когда конечная точка не найдена. Когда я перезапускаю службу A, будут найдены конечные точки.
Не может быть, что праймериз работают и хорошо, но вторичные устройства еще не в порядке? Как я могу это выяснить? Есть ли какой-либо класс рабочей среды, к которому я могу получить доступ, чтобы узнать, будет ли вторичное обнаружение, если я его вызову?