Основной или не имеющий состояния экземпляр раздела имеет недопустимый адрес


Я создал службу с отслеживанием состояния с использованием стандартного разбиения:

<StatefulService ServiceTypeName="ExamplesServiceType" TargetReplicaSetSize="[ExamplesService_TargetReplicaSetSize]" MinReplicaSetSize="[ExamplesService_MinReplicaSetSize]">
            <UniformInt64Partition PartitionCount="[ExamplesService_PartitionCount]" LowKey="-9223372036854775808" HighKey="9223372036854775807" />
         </StatefulService>

Манифест службы устанавливает параметры в (out-of-the-box):

 <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".

Что я упускаю?

2 16

2 ответа:

Я не регистрировал пульт дистанционного управления, как описано в 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)) };
    }

На случай, если кто-то еще придет сюда, задаваясь вопросом, Что делать для служб без гражданства, это работает для меня:

protected override IEnumerable<ServiceInstanceListener> CreateServiceInstanceListeners()
{
    return new[] { new ServiceInstanceListener(context => this.CreateServiceRemotingListener(context)) };
}