ActorRefs.没有人正在通过远程处理

时间:2016-03-15 20:37:18

标签: akka.net

我正在使用Akka.Remote从ASP.NET Web应用程序调用我后端的actor(托管为Windows服务)。作为代码的一部分,我正在查找远程系统上可能存在或可能不存在的演员。

在客户端上,呼叫如下......

var profileActor = await someRemoteActor.Ask<IActorRef>(new LoadProfile("me@here.com"));

if (profileActor != ActorRefs.Nobody)
{
  // Now do stuff with the profile
  ...
}

在远程方面,代码正在这样做......

Receive<LoadProfile>(rq =>
{
  IActorRef child = ActorRefs.Nobody;
  if (ProfileExistsInTheDatabase(rq.Username))
  {
    child = Context.ActorOf<Profile>(rq.Username);
    child.Tell(rq);
  }

  Sender.Tell(child);
};

这不是确切的代码,但显示了如果在服务器端找不到某些东西则返回ActorRefs.Nobody的想法。

现在,问题在于当ActorRefs.Nobody返回到客户端时,它已被转换为远程actor引用,这是我没想到的。我期待ActorRefs.Nobody遍历远程处理层并在客户端上变成同样的东西。

我不希望这种方式起作用吗?我想是这样的,因为它不像我预期的那样工作,但是一些澄清会很好。

现在我已经修改了代码以返回一个消息类,其中包含一个标志来指示远程actor是否存在,但我宁愿能够使用ActorRefs.Nobody。

预先感谢您的协助。

1 个答案:

答案 0 :(得分:0)

ActorRefs.Nobody可能无法转换回远程系统中的Nobody.Instance。

作为一种解决方法,您可以将profileActor.Path与ActorRefs.Nobody.Path进行比较。

您可以在GitHub存储库上提出相关问题,这可以在远程层中修复。