我有一个使用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 反序列化具有多个构造函数的类