具有多个接口的可靠演员?

Reliable Actor with multiple interfaces?

有没有办法创建具有两个接口的 actor? 我想在 Interfaces 程序集中定义 public 接口,在 actor 程序集中定义内部接口。原因是把客户端应该使用的方法和系统应该使用的方法分开。

例如:

class MyActor
    : Actor
    , IPublicInterface
    , IInternalInterface
{
    ...
}

这似乎是不可能的,因为 ActorService 属性只允许一个名称。

是否有更好的(可行的)方法来隔离 public 和内部方法?

我相信您可以通过促进 Reliable Actors 框架中的多态性来实现这一点:

https://azure.microsoft.com/en-us/documentation/articles/service-fabric-reliable-actors-polymorphism/

想到的另一种隔离方法是将 public 和内部功能分解为更多参与者。

我通过一些实验找到了答案。

您可以使用任何您想要的接口,只要在 ActorProxy.Create 调用中指定的 serviceUri 是 actor 的 Uri。因此,对于我上面的示例,以下代码将提供对 IInternalInterface 的访问权限。

ActorProxy.Create<IInternalInterface>(actorId, ActorNameFormat.GetFabricServiceUri(typeof(IPublicInterface)));

当您有多个接口时,运行时无法为服务生成默认名称。您需要申请https://msdn.microsoft.com/en-us/library/azure/microsoft.servicefabric.actors.runtime.actorserviceattribute.aspx

[ActorService(Name="MyActorService")] 到你的 actor 实现。然后,您可以使用 https://msdn.microsoft.com/en-us/library/azure/mt694503.aspx 方法使用此服务名称创建 actor 代理。