2016-03-15 120 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庫文件,關於這個問題,這是有可能被固定在遙控層。