Sockets 将F#应用程序连接到固定刺激器

Sockets 将F#应用程序连接到固定刺激器,sockets,f#,fix-protocol,Sockets,F#,Fix Protocol,我正在尝试将我的F#应用程序与FIXImulator连接起来。FixImmulator正在本地计算机上运行,并在端口9878上侦听。应用程序编译并运行(它也在交互模式下工作) 但是,连接从未建立。我认为问题不在于我的代码,因为它运行并试图建立连接。下面是实现此目的的方法: type FIXEngine() = let settings = new SessionSettings(@"C:\Users\pw\Documents\Visual Studio 2013\Proj

我正在尝试将我的F#应用程序与FIXImulator连接起来。FixImmulator正在本地计算机上运行,并在端口9878上侦听。应用程序编译并运行(它也在交互模式下工作)

但是,连接从未建立。我认为问题不在于我的代码,因为它运行并试图建立连接。下面是实现此目的的方法:

    type FIXEngine() =
        let settings = new SessionSettings(@"C:\Users\pw\Documents\Visual Studio 2013\Projects\FSharpForQuantFirst\TradingSystem\config.cfg")
        let application = new ClientInitiator()
        let storeFactory = FileStoreFactory(settings)
        let logFactory = new ConsoleLogFactory(settings)
        let messageFactory = new MessageFactory()
        let initiator = new SocketInitiator(application, storeFactory, settings)
        let ids = initiator.GetSessionIDs()
        let st = initiator.Start() |> ignore
        member this.init() : unit = ()
        member this.start() : unit = initiator.Start()
启动器
有一个
已连接
标志。该标志设置为
false
。也没有返回会话ID

我在主模块中初始化代码:

    module Main = 
    let fixEngine = new FIX.FIXEngine()
    fixEngine.init()
    fixEngine.start()
    [<EntryPoint>]
    let main argv = 
        printfn "%A" argv
        0
FixImmulator的配置如下所示:

[DEFAULT]
FIXimulatorLogToFile=N
FIXimulatorLogToDB=N
FIXimulatorAutoPendingCancel=N
FIXimulatorAutoPendingReplace=N
StartTime=00:00:00
FIXimulatorSendOnBehalfOfCompID=N
FIXimulatorAutoAcknowledge=N
FIXimulatorAutoCancel=N
FIXimulatorAutoReplace=N
FIXimulatorPricePrecision=4
FIXimulatorSendOnBehalfOfSubID=N
SocketAcceptPort=9878
RefreshMessageStoreAtLogon=Y
BeginString=FIX.4.2
HeartBtInt=30
EndTime=00:00:00
ConnectionType=acceptor
DataDictionary=FIX42.xml
FileStorePath=data
FIXimulatorCachedObjects=50
JdbcURL=jdbc:mysql://localhost:3306/quickfix
JdbcUser=fiximulator
JdbcPassword=fiximulator
JdbcDriver=com.mysql.jdbc.Driver

[SESSION]
FileLogPath=logs
OnBehalfOfSubID=DESK
TargetCompID=TRADINGSYSTEM    
SenderCompID=FIXIMULATOR
OnBehalfOfCompID=BROKER
我一直在玩不同的配置设置,但两天后我的想法就不多了


代码来源于“定量金融的F#”。非常感谢您对建立连接的任何帮助。

一个问题是,正如评论中所建议的,第一个配置文件中的目标IP地址。我不得不把它从
0.0.0.0
改回
127.0.0.1

除此之外,我在上面的代码中发现了另外两个问题

一个问题是,我试图在连接启动之前获取会话ID:

initiator.GetSessionIDs()

其次,我试图启动
FIXEngine
两次。从
FIXEngine
的主体和
模块。从连接到FixImmulator的
FIXEngine
类型I的主体中移除
Start
GetSessionID
后,没有出现任何问题。

我怀疑问题出在线路
SocketConnectHost=0.0.0
中127.0.0.1和192.168.0.1。0.0.0.0是我启动FixImmulator时控制台中显示的内容。它说:在0.0.0.0/0.0.0.0:9878监听连接,所以我也尝试了一下。@Petr实际上,在消除了其他问题后,我不得不返回本地主机IP(127.0.0.1),所以你的建议肯定是解决方案的一部分
initiator.GetSessionIDs()