为什么消息中的多个构造函数会导致Akka.NET传递失败



我有一个使用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毫秒。原因是:[Akka.Remote.EndpointDisassociatedException:解除关联的

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

我在文档中找不到任何关于这个问题的内容,有人能向我解释一下这个限制吗?

有人能提供任何建议的解决方案吗?

Bartosz的评论是正确的答案-默认情况下,我们对用户定义的消息使用JSON.NET序列化,为了反序列化,您需要使用JsonConstructor属性标记其中一个构造函数:无法使用JSON.NET 反序列化具有多个构造函数的类

相关内容

  • 没有找到相关文章

最新更新