Azure:在actor调用中“服务不存在”

时间:2017-04-20 23:19:18

标签: c# azure-service-fabric service-fabric-actor

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

3 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

这花了我一段时间,但我的问题是我在ActorProxy.Create电话中完全错误的界面。服务结构仍然注册了演员,它可以在服务结构浏览器中看到,但不要被愚弄。

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

答案 2 :(得分:0)

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