我正在使用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。
预先感谢您的协助。
答案 0 :(得分:0)
ActorRefs.Nobody可能无法转换回远程系统中的Nobody.Instance。
作为一种解决方法,您可以将profileActor.Path与ActorRefs.Nobody.Path进行比较。
您可以在GitHub存储库上提出相关问题,这可以在远程层中修复。