C# 调试Akka.NET远程连接(无法连接-绑定失败)

C# 调试Akka.NET远程连接(无法连接-绑定失败),c#,akka.net,akka-remote-actor,akka.net-networking,C#,Akka.net,Akka Remote Actor,Akka.net Networking,使用作为Akka.NET源代码的一部分提供的示例聊天服务器/客户端项目,我尝试对其进行修改,使其能够在网络上的两台计算机上成功运行 我有两个系统通过这样的路由器连接 192.168.0.29 (Server) <---------------| Router |---------------> 192.168.0.52 (Client) 客户: akka { actor { provider = remote } remote {

使用作为Akka.NET源代码的一部分提供的示例聊天服务器/客户端项目,我尝试对其进行修改,使其能够在网络上的两台计算机上成功运行

我有两个系统通过这样的路由器连接

192.168.0.29 (Server) <---------------| Router |---------------> 192.168.0.52 (Client)
客户:

akka {  
    actor {
        provider = remote
    }
    remote {
        dot-netty.tcp {
            port = 0 #Tell Akka that this is a client connection/use random port.
            hostname = 192.168.0.29 #Tell Akka.NET which remote instance to connect to
        }
    }
}
不幸的是,尽管我能够成功地在本地连接到聊天服务器,但无论我如何配置我的Hocon,我似乎都无法将远程实例绑定到位于机器上的服务器参与者
192.168.0.29

我收到的特定错误消息

[ERROR][27/11/2019 4:58:36 PM][Thread 0004][Akka.Remote.Transport.DotNetty.TcpTransport] Failed to bind to 192.168.0.29:0; shutting down DotNetty transport.
Cause: System.Net.Sockets.SocketException (10049): The requested address is not valid in its context
   at System.Net.Sockets.Socket.UpdateStatusAfterSocketErrorAndThrowException(SocketError error, String callerName)
此错误消息向我表明,Akka.NET无法访问任何可用套接字

具有讽刺意味的是,不久前,它帮助我解决了连接问题,但直到最近我才再次使用Akka.NET

我注意到这两台机器都关闭了防火墙,可以成功地相互ping,我还使用了各种设置组合

Akka.NET服务器/客户端应用程序的原始源代码位于我的当前版本


有人能提供一些关于我可能做错了什么以及如何改进Akka.NET远程连接调试的见解吗?例如,是否有一种方法可以验证服务器
192.168.0.29
上的Actor系统是否可以从
192.168.0.52
外部访问

哈哈,在发帖5分钟后,我终于能够确定解决方案(尽管它并不理想)

解决方案是,当您在客户端应用程序上实例化
ActorSystem
时,实际上并不是将本地actor系统连接到远程系统,而是创建一个actor系统的本地实例,该实例本身正在侦听随机端口

当您创建
ActorSelection()
引用时,远程连接本身就会发生

所以我要做的就是把我的客户hocon从

hostname = 192.168.0.29

然而,这造成了最后一个(尽管相当小)问题。我现在需要一个不同的hocon文件,用于本地运行的实例和远程运行的实例。诚然,这可能通过代码来解决

我很乐意将能够提出解决这个问题的方案的人标记为解决方案

hostname = 192.168.0.29
hostname = 192.168.0.52