You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Quickfix/N中Initiator的ToApp、ToAdmin回调未触发及请求异常

QuickFix Initiator问题排查与解决建议

问题代码

public static void Main()
{
    SessionSettings settings = new SessionSettings("C:\\Users\\user\\Desktop\\Work\\QFLib\\config\\Config2.txt");
    MyQuickFixApp myApp = new MyQuickFixApp();
    IMessageStoreFactory storeFactory = new FileStoreFactory(settings);
    ILogFactory logFactory = new FileLogFactory(settings);
    var acceptor = new SocketInitiator(
        myApp,
        storeFactory,
        settings,
        logFactory);
    bool sendlogon = true;
    acceptor.Start();
    while (true)
    {
        if(sendlogon)
        myApp.SendLogonRequest(myApp.session.SessionID);
        sendlogon = false;
        Thread.Sleep(1000);
    }
    acceptor.Stop();
}

遇到的问题

  • Initiator的ToApp、ToAdmin回调未触发
  • 服务器未收到请求,无响应返回
  • 用TCP客户端发送生成的消息时,服务器报解析错误且无响应
  • 配置文件和消息格式看似正常

排查与解决建议

1. 修正会话与消息发送逻辑

QuickFix的SocketInitiator会自动处理Logon请求发送,手动调用SendLogonRequest会干扰内部会话管理流程,导致回调不触发、会话无法正常建立:

  • 移除手动发送Logon的代码块,让Initiator自动完成会话初始化
  • 避免直接访问myApp.session获取SessionID,应通过Session.LookupSession从配置中获取有效会话ID,或依赖Initiator的自动会话绑定

2. 验证Application类的回调实现

确保MyQuickFixApp正确继承QuickFix.Application,且重写的方法签名完全匹配:

public class MyQuickFixApp : QuickFix.Application
{
    public override void ToAdmin(Message message, SessionID sessionID)
    {
        // 添加日志输出,确认回调触发
        Console.WriteLine($"ToAdmin called: {message}");
        base.ToAdmin(message, sessionID);
    }

    public override void ToApp(Message message, SessionID sessionID)
    {
        Console.WriteLine($"ToApp called: {message}");
        base.ToApp(message, sessionID);
    }

    // 实现OnCreate、OnLogon、OnLogout等生命周期方法,监控会话状态
}

3. 排查消息解析错误

服务器解析错误通常是消息格式不兼容导致:

  • 确认消息的BeginString(如FIX.4.4)与配置文件、服务器要求完全一致
  • 检查消息字段分隔符是否为|,且字段顺序、校验和(CheckSum)计算正确
  • 避免手动构造消息时遗漏必填字段,建议使用QuickFix的MessageBuilder生成合规消息

4. 配置与日志验证

  • 核对配置文件中的SocketConnectHost、SocketConnectPort、SenderCompID、TargetCompID是否与服务器配置完全匹配
  • 查看QuickFix日志文件,重点关注连接失败、会话初始化错误的信息,这些日志会直接暴露问题根源

修正后的示例代码

public static void Main()
{
    SessionSettings settings = new SessionSettings("C:\\Users\\user\\Desktop\\Work\\QFLib\\config\\Config2.txt");
    MyQuickFixApp myApp = new MyQuickFixApp();
    IMessageStoreFactory storeFactory = new FileStoreFactory(settings);
    ILogFactory logFactory = new FileLogFactory(settings);
    var initiator = new SocketInitiator(
        myApp,
        storeFactory,
        settings,
        logFactory);

    initiator.Start();
    Console.WriteLine("Initiator已启动,按任意键停止...");
    Console.ReadKey();
    initiator.Stop();
}

内容的提问来源于stack exchange,提问作者Bogdan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 16:15:31