1

我有一个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 的服务在调试模式下启动。我真的可以对正在发生的事情使用一些指导。谢谢!

4

3 回答 3

1

ActorService您是否在 Service Fabric 本地集群管理器中看到终结点?当我忘记定义端点时,我已经看到了这个问题。如果您使用的是 default ActorService,我相信它会定义自己的。但是,如果您使用自己的 custom ActorService,则必须自己覆盖CreateServiceReplicaListeners()并创建一个:

protected override IEnumerable<ServiceReplicaListener> CreateServiceReplicaListeners()
{
    return new List<ServiceReplicaListener>(base.CreateServiceReplicaListeners())
    {
        new ServiceReplicaListener(c => new FabricTransportServiceRemotingListener(c, this)),
    };
}
于 2017-04-21T07:07:31.410 回答
1

这花了我一段时间,但我的问题是我在ActorProxy.Create调用中的接口完全错误。Service Fabric 仍然会注册 Actor,并且可以在 Service Fabric Explorer 中看到,但不要上当。

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

于 2017-10-04T18:18:05.347 回答
0

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

于 2017-04-21T15:33:00.620 回答