Я пытаюсь подключиться к службе с сохранением состояния из веб-контроллера в том же кластере.
Службы развернуты нормально и выглядят исправно, без проблем в локальном кластере.
Используемый адрес также является правильным (он также соответствует определению диспетчера кластеров), но когда возникает необходимость вызова этого простого метода в ValuesController :
[Route("api/[controller]")]
[ApiController]
public class ValuesController : ControllerBase
{
// GET api/values
[HttpGet]
public ActionResult<IEnumerable<NodeKey>> GetAll()
{
var nodeKeyClient = ServiceProxy.Create<ISharedKeysService>(new Uri("fabric:/ReliableCollections/SharedKeys"), new ServicePartitionKey(1), TargetReplicaSelector.PrimaryReplica);
var keys = nodeKeyClient.GetAllNodeKeys().Result;
return new ActionResult<IEnumerable<NodeKey>>(keys);
}
Я получаю исключение:
FabricException: основной экземпляр или экземпляр без состояния для раздела
'd74703d1-d74f-49cc-9457-3ab643063ac4' имеет неверный адрес, это означает
этот правильный адрес из реплики / экземпляра не зарегистрирован в
система.
SharedKeys определяется следующим образом:
internal sealed class SharedKeys : StatefulService,ISharedKeysService
{
public SharedKeys(StatefulServiceContext context)
: base(context)
{ }
protected override IEnumerable<ServiceReplicaListener> CreateServiceReplicaListeners()
{
return new[] { new ServiceReplicaListener(context => this.CreateServiceRemotingListener(context)) };
}
Я попытался перезапустить кластер, изменить номер раздела и т. Д.
Тем не менее, он работает с сервисами без сохранения состояния.
Есть идеи, как с этим справиться?
Версия Microsoft.ServiceFabric - 6.3.187
Microsoft.ServiceFabric.Services.Remoting - 3.2.187
В манифесте службы определена следующая конечная точка:
<?xml version="1.0" encoding="utf-8"?>
<ServiceManifest Name="SharedKeysPkg"
Version="1.0.0"
...
<Resources>
<Endpoints>
<Endpoint Name="ServiceEndpoint" />
<Endpoint Name="ReplicatorEndpoint" />
</Endpoints>
</Resources>
</ServiceManifest>