Service Fabric StatelessService не может получить доступ к StatefulService в том же кластере - PullRequest
0 голосов
/ 09 ноября 2018

Я пытаюсь подключиться к службе с сохранением состояния из веб-контроллера в том же кластере.

Службы развернуты нормально и выглядят исправно, без проблем в локальном кластере.

Используемый адрес также является правильным (он также соответствует определению диспетчера кластеров), но когда возникает необходимость вызова этого простого метода в 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>
...