使用C#和QuickFix/N註銷SeqReset後不工作
我想從發起者乾淨地註銷。
initiator.Stop(true);
int tryCount = 5;
while (initiator.IsLoggedOn)
{
tryCount--;
if (tryCount <= 0)
break;
Thread.Sleep(1000);
}
如果我以前已經乾淨地退出 - 我的意思是我發送並收到35 = 5條消息。然後註銷工作。但是,如果我只是切斷連接並登錄,我會收到35 = 4條消息作爲重置,然後當我嘗試註銷時,在日誌中看不到我自己的35 = 5。
爲什麼?
我也得到了在註銷此消息在一個場合:
System.ObjectDisposedException了未處理的HResult = -2146232798
消息=無法訪問已釋放的對象。對象名稱:'FileLog'。
源= QuickFix的對象名= FileLog堆棧跟蹤: 在QuickFix.FileLog.DisposedCheck() 在QuickFix.FileLog.OnEvent(字符串或多個) 在QuickFix.Session.Disconnect(字符串原因) 在QuickFix.SocketInitiatorThread.Read() 在QuickFix.Transport.SocketInitiator.SocketInitiatorThreadStart(對象 socketInitiatorThread) 在System.Threading.ExecutionContext.RunInternal(的ExecutionContext 的ExecutionContext,ContextCallback回調,對象的狀態,布爾 preserveSyncCtx) 在System.Threading.ExecutionContext.Run(ExecutionContext中的ExecutionContext ,ContextCallback回調,對象狀態,布爾型 preserveSyncCtx) 在System.Threading.ExecutionContext.Run(的ExecutionContext的ExecutionContext,ContextCallback回調,對象狀態) 在System.Threading.ThreadHelper.ThreadStart(對象OBJ)的InnerException:
EDIT
我有找到了一個解決方案,即在調用Stop之前註銷每個會話。這不是在文檔中建議的。
我以爲Stop會隱式做到這一點。
var sessionIDs = initiator.GetSessionIDs().ToList();
foreach (var sessionID in sessionIDs)
{
Session session = Session.LookupSession(sessionID);
session.Logout("Normal logout");
}
Thread.Sleep(1000);
int tryCount = 5;
while (initiator.IsLoggedOn)
{
tryCount--;
if (tryCount <= 0)
break;
Thread.Sleep(1000);
}
initiator.Stop(true);
查看代碼編輯...爲什麼這不在DOCS中? – ManInMoon