1

我正在使用 QuickFix 的 .NET 包装器以及来自 QuickFix 站点 (1.13.3) 的最新二进制文件。

该会话被配置为接受者,并安排在每天06:10:0015: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。还有什么我应该检查的吗?

4

1 回答 1

0
Logon 34=1

Logout 34=79

预期的序列号可能是 78。要么你必须重置你的序列号,要么需要让发起者使用它上次用来向你的接受者发送消息的序列号。

配置文件中的以下标签应该可以帮助您。默认情况下它们都是 N,您可能必须将所需的标签更改为 Y 以允许在登录/注销/断开连接时重置序列号。

ResetOnLogon    
ResetOnLogout   
ResetOnDisconnect
RefreshOnLogon  

我的假设是会话注销没有正确发生,因为 Quickfix 仍然保留旧的序列号。并在第一次注销时重置序列号。可能设置了 ResetOnLogout。

于 2012-11-28T16:37:15.210 回答