2013-04-08 48 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