Java QuickFIXJ的会话无效

Java QuickFIXJ的会话无效,java,quickfixj,Java,Quickfixj,我正在尝试与一台服务器上正常工作的外部对手建立修复连接。我已经将实现转移到另一台具有自己防火墙的网络上的服务器上。我可以看到登录消息在应用程序和网络层日志中的双方之间交换。但是,现在我在登录后立即响应对方消息,我的FIX outbound消息引发异常,抱怨没有有效会话发送消息。在此之前,我在网络日志中未看到任何重置。当上述事件发生后,我的quickfixj应用程序发送注销时,会发生重置。根据交易对手的说明,我的心跳间隔设置为30秒-此异常在登录响应后的一秒钟内发生。同一配置在我没有任何防火墙规则

我正在尝试与一台服务器上正常工作的外部对手建立修复连接。我已经将实现转移到另一台具有自己防火墙的网络上的服务器上。我可以看到登录消息在应用程序和网络层日志中的双方之间交换。但是,现在我在登录后立即响应对方消息,我的FIX outbound消息引发异常,抱怨没有有效会话发送消息。在此之前,我在网络日志中未看到任何重置。当上述事件发生后,我的quickfixj应用程序发送注销时,会发生重置。根据交易对手的说明,我的心跳间隔设置为30秒-此异常在登录响应后的一秒钟内发生。同一配置在我没有任何防火墙规则的不同服务器上工作。有什么想法可能导致这种情况,如果与网络相关,什么是确认这一点的最佳方法

更新:
这个问题和我这边的错误逻辑有关——我已经在我这边解决了。会话ID在被访问之前未填充

如果您不发送应用程序消息,心跳是否正常交换?登录序列完成后,日志中是否有异常?我看到对方返回的登录响应,以及调用quickfixj实现中onMessage的应用程序消息。但是,当我处理此消息并调用“Session.sendToTarget”作为第二个参数传入会话时,调用会引发异常,因为会话为null。这只发生在新服务器上,而不是旧服务器旧服务器使用的ubuntu没有防火墙,新服务器使用的centos有防火墙,我不控制-我尝试过tshark,但在应用程序注销后我才看到任何重置-猜测是因为这个例外。从你的描述来看,更像是你这边的软件错误。也许,调试会话和少量日志将帮助您跟踪问题。为什么它总是发生在一台服务器上,而不是另一台服务器上?他们都在使用JDK7,但一个是ubuntu,另一个是centosIt,很难说没有看到代码,我相信,你的应用程序中有很多代码,但是如果网络工具没有显示任何问题,正如你所说,你的代码中应该有一个bug。推测一下,当从一个硬件移动到另一个硬件时,可能会发现一些并发性问题。