2016-03-15 52 views
2

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

在调用如下客户端...

var profileActor = await someRemoteActor.Ask<IActorRef>(new LoadProfile("[email protected]")); 

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回来给客户,它已经转换成远程演员的参考,这是我没想到。我曾期待ActorRefs.Nobody来遍历远程处理层,并将其作为客户端上的同一事物。

我错了,期望这种方式工作吗?我想是这样,因为它不符合我的预期,但一些澄清会很好。

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

在此先感谢您的帮助。

回答

0

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

作为一种变通方法,你可以比较profileActor.Path而不是ActorRefs.Nobody.Path。

你可以在GitHub库文件,关于这个问题,这是有可能被固定在遥控层。