ActorRefs.Nobody 正在通过远程翻译

ActorRefs.Nobody being translated by remoting

我正在使用 Akka.Remote 从 ASP.NET 网络应用程序调用我后端的一个参与者(托管为 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 是 returned。

现在,问题是当 ActorRefs.Nobody 返回客户端时,它已被转换为远程 actor 引用,这是我没有预料到的。我期待 ActorRefs.Nobody 遍历远程处理层并在客户端出现同样的事情。

我期望它以这种方式工作是不是错了?我想是的,因为它没有按我预期的方式工作,但一些澄清会很好。

现在我已经将代码更改为 return 一条消息 class,其中包含一个标志以指示远程参与者是否存在,但我宁愿能够使用 ActorRefs.Nobody.

在此先感谢您的帮助。

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

作为变通方法,您可以将 profileActor.Path 与 ActorRefs.Nobody 进行比较。改为使用路径。

您可以在 GitHub 存储库中提交有关此问题的问题,这可以在远程层中修复。