2013-04-08 51 views
0

我有一个QuickFIX/n,我已经给客户端的实现。它连接到Currenex RFQ系统。偶尔启动应用程序时遇到问题。没有错误被抛出,并且在我的测试中它工作正常。他们能够成功连接的唯一方法是重新启动整个服务器。QuickFIX/n没有连接

我不知道为什么会发生这种情况,它不会引发任何错误。我有我的整个修复连接包装在一个try | catch语句,所以我不知道我可能会错过什么。以下是我的连接方法。代码执行并且所有日志记录都被打中,但登录消息从不发送。

我在我的智慧结尾,我们的客户也是如此,任何指针都会有很大的帮助。

代码:

public void Connect() 
    { 
     try 
     { 
     string beginString = "FIX.4.2"; 
     MemoryStoreFactory storeFactory = new MemoryStoreFactory(); 
     MessageStoreFactory msgFactory; 
     LogFactory logfactory; 
     SessionSettings settings = new SessionSettings(); 
     QuickFix.Dictionary entry = new QuickFix.Dictionary(); 

     entry.SetString("ConnectionType", "initiator"); 
     entry.SetString("ReconnectInterval", "1"); 
     entry.SetString("SocketConnectHost", this.fixHost); 
     entry.SetString("FileLogPath", this.workingDirectory + "logs"); 
     entry.SetString("FileStorePath", this.workingDirectory + "logs"); 
     entry.SetString("StartTime", "23:59:59"); 
     entry.SetString("EndTime", "23:59:59"); 
     entry.SetString("HeartBtInt", "30"); 
     entry.SetString("SocketNodelay", "Y"); 
     //entry.SetString("SocketTrafficClass", "IPTOS_LOWDELAY"); 
     entry.SetString("ResetSeqNumFlag", "Y"); 
     //entry.SetString("UseDataDictionary", "N"); 
     entry.SetString("DataDictionary", this.workingDirectory + "FixResourceFiles\\FIX42.xml"); 
     entry.SetString("ResetOnLogout", "Y"); 
     entry.SetString("ResetOnDisconnect", "Y"); 
     entry.SetString("CheckLatency", "N"); 
     entry.SetString("SocketConnectPort", this.fixPort); 

     this.sessionId = new QuickFix.SessionID(beginString, this.senderCompId, this.targetCompId, DateTime.Now.ToString("yyyyMMddhhmmssfff")); 

     settings.Set(this.sessionId, entry); 

     if (this.storeAllQuickFixMsgs) 
     { 
      logfactory = new FileLogFactory(settings); 
     } 
     else 
     { 
      logfactory = new ScreenLogFactory(settings); 
     } 

     msgFactory = new FileStoreFactory(settings); 

     Logger.MsgLog("Creating QuickFIX Socket Initiator..."); 
     QuickFix.Transport.SocketInitiator init = new QuickFix.Transport.SocketInitiator(this, msgFactory, settings); 
     //this.socketInitiator = new QuickFix.Transport.SocketInitiator(this, msgFactory, settings, logfactory); 
     this.socketInitiator = init; 


     Logger.MsgLog("Starting Socket Initiator..."); 
     this.socketInitiator.Start(); 
     Logger.MsgLog("Started"); 

     } 
     catch (Exception ex) 
     { 
      Logger.MsgLog("Error on FIX Connection: " + ex); 
     } 
    } 

设置: (企业内部FIX主机) CNX i1scfxcrfq 10.192.6.121 test1234

+0

“他们遇到问题” - 问题是什么?他们的消息日志说什么?如果未连接,则应在消息日志中看到* something *。 – 2013-04-08 17:10:14

+0

@GrantBirchmeier,就是这样 - 没有日志条目,什么都没有。没有连接尝试它只是坐在那里,但从我的日志记录,套接字连接代码全部执行。 – user576838 2013-05-15 16:36:42

+0

此代码未将日志传递给SocketInitiator,因此它*不能*日志。 – 2013-05-17 02:43:58

回答

0

检查以下两行:

entry.SetString("StartTime", "23:59:59"); 
entry.SetString("EndTime", "23:59:59"); 

我想这是为什么你可能会遇到问题。启动器将只在StartTime启动。 您的客户可能在其他时间启动它?

+0

我已将它更改为OO:00:00以消除此问题。没有让他们测试它。 – user576838 2013-04-10 18:11:16

+0

为什么不移动它并在启动器连接时启动? – Rush 2013-04-11 14:11:47

+0

开始时间/结束时间相同是没有问题的。这意味着会话将在当时重新开始。如果你把它设置为一个无效的时间,我认为你会得到一个异常,它不会启动。 – 2013-05-17 02:41:24