azure service fabric - tutorial - La instancia primaria o sin estado para la partición tiene una dirección no válida
service fabric tutorial (3)
Creé un servicio con estado con la partición lista para usar:
<StatefulService ServiceTypeName="ExamplesServiceType" TargetReplicaSetSize="[ExamplesService_TargetReplicaSetSize]" MinReplicaSetSize="[ExamplesService_MinReplicaSetSize]">
<UniformInt64Partition PartitionCount="[ExamplesService_PartitionCount]" LowKey="-9223372036854775808" HighKey="9223372036854775807" />
</StatefulService>
El manifiesto de servicio establece los parámetros en (fuera de la caja también):
<Parameter Name="ExampleService_PartitionCount" Value="1" />
<Parameter Name="ExampleService_MinReplicaSetSize" Value="2" />
<Parameter Name="ExampleService_TargetReplicaSetSize" Value="3" />
<Parameter Name="WebService_InstanceCount" Value="1" />
Ahora quiero llamar a mi servicio con estado desde mi servicio sin estado en el mismo grupo:
ServiceUriBuilder builder = new ServiceUriBuilder(ExampleServiceName);
var service = ServiceProxy.Create<IExampleService>(builder.ToUri(),new ServicePartitionKey(1));
return service.MyCallAsync(id);
Estoy recibiendo el siguiente error:
La instancia primaria o sin estado para la partición ''a67f7afa-3370-4e6f-ae7c-15188004bfa1'' tiene una dirección no válida, esto significa que la dirección de la derecha de la réplica / instancia no está registrada en el sistema
El servicio de estado Estoy intentando acceder a los registros de eventos y los registros llevan "partitionId": "a67f7afa-3370-4e6f-ae7c-15188004bfa1".
¿Qué me estoy perdiendo?
En caso de que alguien más venga aquí preguntándose qué hacer por los servicios sin estado, esto funciona para mí:
protected override IEnumerable<ServiceInstanceListener> CreateServiceInstanceListeners()
{
return new[] { new ServiceInstanceListener(context => this.CreateServiceRemotingListener(context)) };
}
No estaba registrando un control remoto como se explica en 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)) };
}
Para aquellos de ustedes que usan Microsoft.ServiceFabric.Services.Remoting
versión 3.3.638, encontré que no había un método de extensión llamado CreateServiceInstanceListeners()
. Solo encontré CreateServiceRemotingInstanceListeners()
y CreateServiceRemotingReplicaListeners()
en Microsoft.ServiceFabric.Services.Remoting.Runtime.ServiceRemotingExtensions
.
Este código compilado para mí:
protected override IEnumerable<ServiceInstanceListener> CreateServiceInstanceListeners()
{
return this.CreateServiceRemotingInstanceListeners();
}