因此,我们发送一条不带边的 FIX 交易消息,银行拒绝使用 35=8 执行报告和 150=8 拒绝,然后是文本FIX Tag 54 (Side) has invalid value (0). Reason (should be either 1 or 2)
,然后是 35=3 拒绝消息Value is incorrect (out of range) for this tag
。35=3 消息被破解,但 35=8 消息永远不会到达 fromapp。
我错过了一个设置吗?
35=3 表示传输级别(又名管理员级别)拒绝。该消息在较低的解析层被拒绝,这意味着它的格式非常错误,甚至没有传递给您的应用程序。
通常这种拒绝意味着消息被弄乱了,以至于引擎甚至无法正确解析它,或者标头字段无法解析为已知会话。我有点惊讶您的特殊情况触发了 35=3 而不是 35=j。
我想您可以查看 FIX 规范,以了解当枚举类型标记具有未知值时它要求什么。在这种情况下,也许引擎遵循规范?
我猜想带有不正确54=0 标记的 35=8 消息无法到达 FromApp 或 FromAdmin 的原因是由于数据字典约束,但这给了我实现public void FromEarlyIntercept(Message msg, SessionID s)
接口的机会,并且解决了问题一个糟糕的35=8 报告现在被报告给用户......但是引入了一个新问题,一个好的报告现在被报告两次。
所以我添加<value enum="0" description="ERROR"/>
到枚举中<field number="54" name="Side" type="CHAR">
,现在 35=8 消息不会被 35=3 消息拒绝。