私はAkka.NETを初めて使用しています。私は最近、私の大学のプロジェクトを始めて、奇妙な問題に直面しました。 2つの異なるデスクトップアプリケーションに2つのActorSystemがあります。最初のActorSystemでは、Akka.Remoteを使用して2つのアクター間でZippedAddressListMessageというメッセージを送信しています。Akka.NET:他のActorSystemにリストメッセージを送信できません
public class ZippedAddressListMessage
{
public ZippedAddressListMessage(List<string> list)
{
this.Values = list.AsReadOnly();
}
public IReadOnlyCollection<string> Values { get; private set; }
}
これは正常に動作しますが、私は他のActorSystemにこのメッセージを送信しようとすると、私はエラーの膨大なリストを取得する:私は一つだけで構成されて単純なメッセージを送信する場合、それにも関わらず screenshot #1 of the console window with the error
を整数、すべて正常に動作します。シリアライゼーションの問題がある可能性がありますが、どのように解決しなければならないのか分かりませんでした。 私はどこでも検索しましたが、答えはまだ見つかりませんでした。どうかこの問題を解決する方法を教えてください。最初ActorSystemから
俳優:他のActorSystemから
using Akka.Actor;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using ChatMessages;
using System.Diagnostics;
using Akka.Serialization;
using Akka.Actor.Internal;
using Akka.Remote;
namespace Agent
{
public class ActorHelper: ReceiveActor
{
int N;
int fromId;
int count;
IActorRef chiefAgent;
List<recordItem> agentList;
public ActorHelper()
{
count = 0;
agentList = new List<recordItem>();
Receive<CreateHelpersMessage>(msg =>
{
chiefAgent = Sender;
fromId = msg.fromID;
N = msg.N;
for (int i = 0; i < msg.N; i++)
{
Process.Start("C:\\Users\\Artemij\\Source\\Repos\\Client\\AgentHelper\\AgentHelper\\bin\\Debug\\AgentHelper.exe",
"akka.tcp://[email protected]:8000/user/AgentActor/ActorHelper" + " " + i);
}
});
Receive<NewAgentHelperMessage>(msg =>
{
Console.WriteLine(msg.name + " " + Sender.Path.ToString() + " || " + (count+1) + "/" + N);
agentList.Add(new recordItem(fromId + count, msg.name, Sender));
count++;
Context.Watch(Sender);
if (count == N)
{
chiefAgent.Tell(new AddressListMessage(agentList), Self);
}
});
Receive<AddressListMessage>(msg =>
{
Console.WriteLine("All is ready");
List<string> temp = new List<string>();
foreach (recordItem i in msg.Values)
{
temp.Add(i.ID + " " + i.name + " " + Serialization.SerializedActorPath(i.address));
}
foreach (recordItem i in agentList)
{
Console.WriteLine(i.address);
//PROBLEM HERE!
i.address.Tell(new ZippedAddressListMessage(temp), Self);
}
});
}
}
}
俳優:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Akka.Actor;
using ChatMessages;
using System.Diagnostics;
namespace AgentHelper
{
class AgentHelperActor: ReceiveActor
{
int priority;
ActorSelection seniorAgentActor;
List<recordItem> fullList;
public AgentHelperActor(string addressSenior, string rank)
{
fullList = new List<recordItem>();
seniorAgentActor = Context.ActorSelection(addressSenior);
Int32.TryParse(rank, out priority);
seniorAgentActor.Tell(new NewAgentHelperMessage("agent"+priority, ""), Self);
//RECEIVING A LIST!!
Receive<ZippedAddressListMessage>(msg =>
{
Console.WriteLine("The entire list");
});
Receive<NewAgentHelperMessage>(msg =>
{
Console.WriteLine(msg.name);
});
}
public void updateList(IReadOnlyCollection<recordItem> list)
{
fullList = new List<recordItem>(list);
foreach (recordItem i in fullList)
{
Console.WriteLine(i.ToString());
}
}
}
}
UPDATED: ここに、最初のエラーのスクリーンショットがあります。 screenshot #2 of the console window with the error これは、System.String []の形式がJSONのシリアル化と互換性がないと書いています。