Ошибка Service Fabric: «Сервис не существует» - PullRequest
0 голосов
/ 13 июня 2019

Я получаю ошибку FabricServiceNotFoundException: Service does not exist. и не могу понять, почему.Имя службы, которую я создаю, именно то, что развернуто в моем кластере.

Это код, где я создаю свою службу:

return ServiceProxy.Create<ICheckoutService>(
                new Uri("fabric:/ECommerce/ECommerce.CheckoutService"),
                new ServicePartitionKey(0));

Это представление проводника.Название сервиса соответствует моему коду.Я делаю это с другими службами без проблем.

enter image description here

Я попытался полный перезапуск, но я получил ту же ошибку:

  1. Удалено приложение из кластера
  2. Неподготовленный тип из кластера
  3. Перезапущен кластер
  4. Перезапущен Visual Studio
  5. Перестроен и развернуто приложение

Обновление

После тестирования я обнаружил, что ошибка возникает в зависимости от порядка, в котором я вызываю сервисы с помощью методов API.

Если я разверну приложение иВызовите методы checkout и get basket, которые выдают ошибку «Служба не найдена».

Однако, если я сначала вызываю другие методы, которые выполняют какое-то изменение (POST), тогда это работает ... странно, верно?Это мой репо, чтобы помочь взглянуть на код.

https://github.com/epomatti/azure-servicefabric-productcatalog

enter image description here

1 Ответ

0 голосов
/ 14 июня 2019

С помощью @ maf748 я включил конфигурацию «Break When Thrown» для всех исключений CLR и обнаружил, что фактическим исключением является «Служба не существует».

enter image description here

В моем случае я оставил следующий автоматически сгенерированный метод для службы Actor, который устанавливал мое состояние в неправильное состояние, и позже это приводило к ошибке в моем собственном коде.

Все, что мне нужно было сделать, это удалить этот метод, который Visual Studio создал из моего метода, и он работал правильно.

    /// <summary>
    /// This method is called whenever an actor is activated.
    /// An actor is activated the first time any of its methods are invoked.
    /// </summary>
    protected override Task OnActivateAsync()
    {
        ActorEventSource.Current.ActorMessage(this, "Actor activated.");

        // The StateManager is this actor's private state store.
        // Data stored in the StateManager will be replicated for high-availability for actors that use volatile or persisted state storage.
        // Any serializable object can be saved in the StateManager.
        // For more information, see https://aka.ms/servicefabricactorsstateserialization

        return this.StateManager.TryAddStateAsync("count", 0);
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...