阿卡.NET.NET框架-Akka.远程配置总是在启动时出错(然后工作正常)



我正在尝试配置远程Actor,但遇到了一些问题。每次我启动控制台应用程序时,都会收到一个错误:

(由于某种原因,我无法捕捉到它,但以下是我可以从中收集的所有信息(:

System.NullReferenceException: 'Object reference not set to an instance of an object.'
at Akka.Actor.ActorPath.ToStringWithAddress(Address address) in D:a1ssrccoreAkkaActorActorPath.cs:line 738

System.NullReferenceException
HResult=0x80004003
Message=Object reference not set to an instance of an object.
Source=Akka
StackTrace:
at Akka.Actor.ActorPath.ToStringWithAddress(Address address) in D:a1ssrccoreAkkaActorActorPath.cs:line 738

从错误显示的内容来看,我似乎没有配置地址。在我关于如何配置akka远程参与者的所有研究中,我都没有找到配置地址的方法。

这是我的代码:

using Akka.Actor
using Akka.Configuration
var config = ConfigurationFactory.ParseString(@"
akka {  
actor {
provider = remote
}
remote {
dot-netty.tcp {
transport-protocol = tcp
port = 8091
hostname = ""127.0.0.1""
}
log-remote-lifecycle-events = INFO
}
}");
using (var system = ActorSystem.Create("MyServer", config))
{
system.ActorOf(Props.Create(() => new AkkaCalcServerPipeTo()), "CalcServer");
...
}

有没有一种方法可以配置远程参与者来删除此错误?我的假设是我的配置是如此错误,以至于我得到了这个随机错误。

我正在上跑步。NET Framework 4.7.2(如果有帮助的话(。

编辑:

我意识到这可能还不够,我在下面添加了AkkaCalcServerPipeTo类,以防有帮助:

using System;
using System.Threading.Tasks;
using Akka.Actor;
using CalcMessages;
public class AkkaCalcServerPipeTo : ReceiveActor, ILogReceive
{
public AkkaCalcServerPipeTo()
{
Receive<Messages.AdditionRequest>(ar =>
{
Console.WriteLine("Received addition request {0} + {1} - {2}", ar.A, ar.B, DateTime.Now);
Sender.Tell(new Messages.CalcResponse(ar.A + ar.B), Self);
});
Receive<Messages.SubtractionRequest>(sr =>
{
Console.WriteLine("Received subtraction request {0} - {1} - {2}", sr.A, sr.B, DateTime.Now);
Sender.Tell(new Messages.CalcResponse(sr.A - sr.B), Self);
});
Receive<Messages.MultiplicationRequest>(mr =>
{
var self = Self; // closure
Task.Run(async () => {
await Task.Delay(2500);//Thread.Sleep(10000);//
Console.WriteLine("Received multiplication request {0} * {1} - {2}", mr.A, mr.B, DateTime.Now);
mr.Sender.Tell(new Messages.CalcResponse(mr.A * mr.B), self);
}).ContinueWith(x =>
{
if (x.IsFaulted)
{
}
}, TaskContinuationOptions.ExecuteSynchronously).PipeTo(self);
});
Receive<Messages.DivisionRequest>(dr =>
{
var self = Self; // closure
Task.Run(async () => {
await Task.Delay(10000);//Thread.Sleep(10000);//
Console.WriteLine("Received division request {0} / {1} - {2}", dr.A, dr.B, DateTime.Now);
dr.Sender.Tell(new Messages.CalcResponse(dr.A / dr.B), self);
}).PipeTo(self);
});
}
}

我也面临同样的问题。这个帖子很旧,但不知怎么的,我在开始的时候也收到了同样的错误。如果我删除配置文件中配置远程信息的部分,则不会出现错误。

我升级到了最新版本。