【问题标题】:Custom FIX Field Type not recognized and rejected by QuickFixQuickFix 无法识别和拒绝自定义 FIX 字段类型
【发布时间】:2017-03-09 06:01:34
【问题描述】:

我正在开发一个使用 QuickFIX for .NET(1.7 版)的应用程序。由于我们的交易对手数据字典中定义的大量自定义字段被我们的 FIX 应用程序拒绝,我决定简单地使用他们的数据字典。

但是,他们有一个自定义字段类型“TENOR”导致异常,所以我遵循了这个论坛的建议:QuickFIX counterparty DataDictionary gieves invalid type exception

并将 TENOR 类型替换为 STRING,如下所示:

 <field number="12345" name="tenor" type="STRING"/> 

原来是&lt;field number="12345" name="tenor" type="TENOR"/&gt;

但是当我们的应用再次尝试登录 FIX 主机时,它抛出异常:“对象引用未设置为对象的实例。”

知道如何解决这个问题吗?谢谢。

[这里有更多来自异常的堆栈跟踪:]

at QuickFix.DataDictionary.DataDictionary.parseMsgEl(XmlNode node, DDMap ddmap, Nullable`1 componentRequired)
at QuickFix.DataDictionary.DataDictionary.Load(Stream stream)
at QuickFix.SessionFactory.createDataDictionary(SessionID sessionID, Dictionary settings, String settingsKey, String beginString)
at QuickFix.SessionFactory.ProcessFixTDataDictionaries(SessionID sessionID, Dictionary settings, DataDictionaryProvider provider)
at QuickFix.SessionFactory.Create(SessionID sessionID, Dictionary settings)
at QuickFix.AbstractInitiator.CreateSession(SessionID sessionID, Dictionary dict)
at QuickFix.AbstractInitiator.Start()

【问题讨论】:

  • 这里不够继续。有堆栈跟踪吗?
  • 不幸的是,唯一的堆栈跟踪是这个“对象引用未设置为对象的实例。”。你们是怎么解决这个问题的?
  • 格兰特,您是如何将 TENOR 替换为 STRING 的?像这样: ?
  • 我认为应该可以。 (我认为我没有第一手的经验,但它应该可以工作。)而且我确信有一个堆栈跟踪;该错误消息应追溯到一行或至少一个函数名称。您附近有人可以帮助您使用 VisualStudio 吗?
  • 授予,我添加了堆栈跟踪 - 见上文。当应用程序调用initiator.start() 来启动会话时会发生这种情况。谢谢。

标签: fix-protocol quickfixn


【解决方案1】:

抱歉,我被其他任务分心了。我昨天再次处理了这个问题并使它工作。如您所知,从 FIX 5 开始,约定是将应用程序和会话消息保存在两个不同的数据字典中。交易对手的数据字典既有会话级消息,也有应用级消息。所以我最初决定清理它并尝试从应用程序 DD 中删除会话级消息,但显然我没有做干净的工作 - 这就是我得到这个“对象引用未设置为对象实例”的原因。例外。

当我简单地使用交易对手的 DD 并将 TENOR 类型替换为 STRING 时,应用程序停止崩溃并登录 FIX 主机。

Grant,看来您的 Java 版本确实支持 TENOR 类型。您打算什么时候升级 .NET 版本以支持它?谢谢。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-05-20
    • 2019-07-10
    • 1970-01-01
    • 2012-04-13
    • 2017-05-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-03
    相关资源
    最近更新 更多