Первичный или неактивный экземпляр для раздела имеет недопустимый адрес
Я создал службу с сохранением данных с готовым разделением:
<StatefulService ServiceTypeName="ExamplesServiceType" TargetReplicaSetSize="[ExamplesService_TargetReplicaSetSize]" MinReplicaSetSize="[ExamplesService_MinReplicaSetSize]">
<UniformInt64Partition PartitionCount="[ExamplesService_PartitionCount]" LowKey="-9223372036854775808" HighKey="9223372036854775807" />
</StatefulService>
Сервисный манифест устанавливает параметры (также из коробки):
<Parameter Name="ExampleService_PartitionCount" Value="1" />
<Parameter Name="ExampleService_MinReplicaSetSize" Value="2" />
<Parameter Name="ExampleService_TargetReplicaSetSize" Value="3" />
<Parameter Name="WebService_InstanceCount" Value="1" />
Теперь я хочу позвонить в мою службу состояния из моей службы без состояния в том же кластере:
ServiceUriBuilder builder = new ServiceUriBuilder(ExampleServiceName);
var service = ServiceProxy.Create<IExampleService>(builder.ToUri(),new ServicePartitionKey(1));
return service.MyCallAsync(id);
Я получаю следующую ошибку:
Первичный или безгосударственный экземпляр для раздела "a67f7afa-3370-4e6f-ae7c-15188004bfa1" имеет недопустимый адрес, это означает, что правый адрес из реплики/экземпляра не зарегистрирован в системе
Служба с сохранением состояния, с которой я пытаюсь добраться до журналов событий, и журналы содержат "partitionId": "a67f7afa-3370-4e6f-ae7c-15188004bfa1".
Что мне не хватает?
Ответы
Ответ 1
Я не регистрировал удаленный доступ, как описано в http://vunvulearadu.blogspot.com/2016/04/azure-service-fabric-primary-or.html
protected override IEnumerable<ServiceReplicaListener> CreateServiceReplicaListeners()
{
return new[] { new ServiceReplicaListener(context => this.CreateServiceRemotingListener(context)) };
}
Ответ 2
В случае, если кто-то еще приходит сюда, задаваясь вопросом, что делать для служб без гражданства, это работает для меня:
protected override IEnumerable<ServiceInstanceListener> CreateServiceInstanceListeners()
{
return new[] { new ServiceInstanceListener(context => this.CreateServiceRemotingListener(context)) };
}