我正在使用 QuickFix 的 .NET 包装器以及来自 QuickFix 站点 (1.13.3) 的最新二进制文件。
该会话被配置为接受者,并安排在每天06:10:00到15:35:00 之间。
问题是,当对方早上第一次尝试登录时,我们的引擎会发送一条不需要的Logout
消息,并且不会从最后一天重置序列号。
我在方法中添加了Session
属性的自定义日志记录,toApp
当对方发送第一Logon
条消息时会记录下来(toApp 时间是 UTC+1):
20121128-06:46:14.546 : 8=FIX.4.2|9=63|35=A|49=OTHER_PARTY|56=US|34=1|52=20121128-06:46:14|98=0|108=60|141=Y|10=046
2012-11-28 07:46:14,546 [3] DEBUG FixAcceptor.FIX.4.2-US-OTHER_PARTY [(null)] <(null)> - Session 'FIX.4.2:US->OTHER_PARTY', isLoggedOn: False, isSessionTime: True, sentLogon: False, sentLogout: False, receivedLogon: False
20121128-06:46:14.546 : 8=FIX.4.2|9=50|35=5|34=79|49=US|52=20121128-06:46:14.546|56=OTHER_PARTY|10=225|
我不明白为什么Logout
要发送此消息。前一天的会话以双方正常注销结束。当对方发送另Logon
一条消息时,一切顺利并Logon
发送正常响应:
20121128-06:46:24.765 : 8=FIX.4.2|9=63|35=A|49=OTHER_PARTY|56=US|34=2|52=20121128-06:46:24|98=0|108=60|141=Y|10=048
20121128-06:46:24.780 : 8=FIX.4.2|9=67|35=A|34=1|49=US|52=20121128-06:46:24.780|56=OTHER_PARTY|98=0|108=60|141=Y|10=000
任何想法为什么会发生这种情况?
编辑 我今天再次检查了日志,昨天的注销程序已正确完成,但序列号没有重置,今天早上再次发送了注销消息:
20121128-15:07:22.248 : 8=FIX.4.2|9=54|35=5|49=OTHER_PARTY|56=US|34=262|52=20121128-15:07:22|58=END|10=192|
20121128-15:07:22.248 : 8=FIX.4.2|9=51|35=5|34=262|49=US|52=20121128-15:07:22.248|56=OTHER_PARTY|10=007|
20121129-06:23:25.326 : 8=FIX.4.2|9=63|35=A|49=OTHER_PARTY|56=US|34=1|52=20121129-06:23:25|98=0|108=60|141=Y|10=044|
20121129-06:23:25.341 : 8=FIX.4.2|9=51|35=5|34=263|49=US|52=20121129-06:23:25.341|56=OTHER_PARTY|10=004|
20121129-06:23:35.544 : 8=FIX.4.2|9=63|35=A|49=OTHER_PARTY|56=US|34=2|52=20121129-06:23:35|98=0|108=60|141=Y|10=046|
20121129-06:23:35.560 : 8=FIX.4.2|9=67|35=A|34=1|49=US|52=20121129-06:23:35.560|56=OTHER_PARTY|98=0|108=60|141=Y|10=250|
因此,如果错误的序列号是发送注销消息的原因,那么问题仍然是为什么 QuickFix 不重置序列号。我已经检查过,在会话配置期间没有设置 StartDay/EndDay 配置参数,只有 StartTime/EndTime。还有什么我应该检查的吗?