1

我有一个使用 Akka.NET 远程处理的非常简单的实现。

具体来说,我有两个演员:

public class ClientQueryActor : ReceiveActor
{
    public ClientQueryActor(ActorSelection stockBarcodeActor)
    {
        this._stockBarcodeActor = stockBarcodeActor ?? throw new ArgumentNullException("stockBarcodeActor must be provided.");

        this.Receive<GetStockBarcodeByBarcodeRequest>(this.HandleStockBarcodeByBarcodeRequestReceived);
        this.Receive<GetStockBarcodeByBarcodeResponse>(this.HandleStockBarcodeByBarcodeResponseReceived);
    }

    private void HandleStockBarcodeByBarcodeRequestReceived(GetStockBarcodeByBarcodeRequest obj)
    {
        this._stockBarcodeActor.Tell(obj);
    }

    private void HandleStockBarcodeByBarcodeResponseReceived(GetStockBarcodeByBarcodeResponse obj)
    {

    }
}


public class StockBarcodeQueryActor : ReceiveActor
{

    public StockBarcodeQueryActor()
    {    
        this.Receive<GetStockBarcodeByBarcodeRequest>(this.HandleStockBarcodeByBarcodeRequestReceived);
    }

    private void HandleStockBarcodeByBarcodeRequestReceived(GetStockBarcodeByBarcodeRequest obj)
    {
        this.Sender.Tell(new GetStockBarcodeByBarcodeResponse(true, null, null));
    }
}

在大多数情况下,这些参与者似乎工作正常,问题出在我发送的消息中。

我的消息类大致如下所示:

public class GetStockBarcodeByBarcodeResponse 
{
    public GetStockBarcodeByBarcodeResponse(bool success) { }

    public GetStockBarcodeByBarcodeResponse(bool success, IEnumerable<string> errors) { } 
}

但是,当我尝试使用此类发送消息时,出现错误

'与远程系统akka.tcp://client@localhost:2552的关联失败;地址现在门控 5000 ms。原因是:[Akka.Remote.EndpointDisassociatedException: Disassociated'

当我删除多个构造函数时,消息发送成功。

我在参考这个问题的文档中找不到任何东西,有人可以向我解释这个限制吗?

任何人都可以提供任何建议的解决方法吗?

4

1 回答 1

1

Bartosz 的评论是正确的答案 - 我们默认使用 JSON.NET 序列化来处理用户定义的消息,为了使反序列化工作,您需要使用JsonConstructor属性标记其中一个构造函数:Unable to deserialize classes with multiple constructors with Json.NET

于 2019-11-19T22:42:50.457 回答