Azure:"Service does not exist" 演员通话

Azure: "Service does not exist" on actor call

我有一个 IActor 我想调用它来做一些简单的基于提醒的计算。它的名字是这样的:

var actorId = new ActorId($"item_{resp.ResultValue.Id}");
var scheduler = ActorProxy.Create<IScheduler>(actorId, ITEM_SCHEDUER_URI);
try
{
    await scheduler.SetupReminderAsync(new ItemInformation()
    {
        EntityId = entityId.ToString(),
        Date = resp.ResultValue.AutoResolveOn
    }).ConfigureAwait(false);
}

但是,每当调用 SetupReminderAsync 方法时,我都会收到 HRESULT: 0x80071BCD: Service does not exist 异常。我不确定这意味着什么,因为我可以清楚地看到 Actor 的服务在调试模式下启动。我真的可以使用一些指导来了解正在发生的事情。谢谢!

您是否在 Service Fabric Local Cluster Manager 中看到 ActorService 的端点?当我忘记定义端点时,我已经看到了这个问题。如果您使用的是默认 ActorService,我相信它会定义自己的。但是,如果您使用自己的自定义 ActorService,则必须覆盖 CreateServiceReplicaListeners() 并自己创建一个:

protected override IEnumerable<ServiceReplicaListener> CreateServiceReplicaListeners()
{
    return new List<ServiceReplicaListener>(base.CreateServiceReplicaListeners())
    {
        new ServiceReplicaListener(c => new FabricTransportServiceRemotingListener(c, this)),
    };
}

事实证明我的 ITEM_SCHEDULER_URI 不正确,因为我假设端点与实际填充的端点不同。检查 ApplicationManifest 后,我能够解决问题。

这花了我一段时间,但我的问题是我在 ActorProxy.Create 调用中的界面完全错误。 Service Fabric 仍然注册了 Actor,可以在 Service Fabric Explorer 中看到,但不要被骗了。

不要像我一样,在仔细检查清单之前检查简单的编码错误。