QuickFixN OnLogon触发NullReferenceException 位于QuickFix.Session.NextLogon问题排查
问题根因定位
首先你观察抛出的异常栈即可定位核心问题:System.NullReferenceException是在你自定义实现的IsFixService.IsFixService.OnLogon(SessionID s)方法内部抛出,不属于QuickFix框架的内部错误,NextLogon是框架收到对端登录响应后的正常回调流程,哪怕只有一次登录请求,只要收到对端返回的35=A登录报文,这个流程就会触发,不属于异常调用。
大概率触发原因
你可以优先检查报文和OnLogon代码的匹配逻辑:
- 你主动发送的登录报文中携带
50=FIX.API(SenderSubID字段),但对端返回的登录报文中携带的是57=FIX.API(TargetSubID字段),如果你在OnLogon方法中直接访问SessionID的对应子字段未做空判断,就会触发空引用异常 - 部分开发者会在OnLogon中调用自定义的服务、缓存或配置对象,若这些对象在会话初始化阶段还未完成实例化,也会触发空引用
排查步骤
- 给
OnLogon方法入口添加日志,打印入参SessionID的完整值,以及所有你在方法中访问的子字段(SenderSubID/TargetSubID等),确认是否存在null值 - 临时注释掉
OnLogon中所有自定义业务代码,仅保留日志输出,若不再抛出异常,逐行放开代码即可定位到具体触发空引用的代码行 - 检查QuickFix会话配置,确认是否配置了SubID相关的必填规则,若存在校验逻辑也要补充空判断处理
内容的提问来源于stack exchange,提问作者rupweb
相关产品推荐
相关产品推荐

