重置消息序列号而不重新连接

时间:2011-12-27 13:35:06

标签: c# .net quickfix

由于官方的QuickFix网站无效,我在这里问。 我正在努力满足我的经纪人(FXCM)对API准备的要求。我使用的是quickfix .NET v1.13.3。其中一个要求是我需要每天重置一次序列号,并且连接必须仍然有效。但是当我使用:

重置序列号时
QuickFix.Session.lookupSession(mSessionID).setNextSenderMsgSeqNum(1);
QuickFix.Session.lookupSession(mSessionID).setNextTargetMsgSeqNum(1);

连接重新连接。有没有办法重置它而不退出?

我的配置文件:

[DEFAULT]

#client connection
ConnectionType=initiator

#Logon & Logout timers
LogonTimeout=1
LogoutTimeout=1

ValidateFieldsOutOfOrder=Y
ValidateUserDefinedFields=Y
ValidateFieldsHaveValues=Y
AllowUnknownMsgFields=Y
SocketTcpNoDelay=Y

FileStorePath=Store

CheckLatency=N
CheckCompID=Y

SendRedundantResendRequests=Y
ContinueInitializationOnError=Y

ResetOnLogon=Y
ResetOnLogout=Y
ResetOnDisconnect=Y
ForceResync=Y

[SESSION]

#login info
username=****
password=****

#protocol version 4.4
BeginString=FIX.4.4

#database and compid
SenderCompID=*****
TargetCompID=*****
TargetSubID=******

HeartBtInt=30
StartTime=01:00:00
EndTime=22:00:00
StartDay=Mon
EndDay=Fri
UseLocalTime=Y

ReconnectInterval=20

#data dictionary
UseDataDictionary=Y
DataDictionary=FXService.FXCM.xml

我在logout消息的日志中发现了这个错误:

MsgSeqNum too low, expecting 12 but received 3 

所以我认为错误在于我的重置时间。何时可以安全地重置序列号以及如何操作?

1 个答案:

答案 0 :(得分:2)

ResetOnLogon=Y 
ResetOnLogout=Y 
ResetOnDisconnect=Y 

默认情况下,当您登录/注销/断开连接时,您正在重置消息序列号。因此,当您重置序列号后,在设置会话后的代码中,它将被另一方拒绝。

如果您不想断开与现有连接的连接,则唯一的选择是读取拒绝消息并使用拒绝消息中提到的序列号。重置已经存在的会话中的序列号将是麻烦的,即用正确的序列号重建消息,然后重新发送它。最好只在登录/注销/断开时重置序列,默认情况下,quickfix引擎会在配置文件中设置标志时执行此操作。