Quickfix,是否有一个“catch-all”方法OnMessage来处理未被重载方法处理的传入消息?

时间:2013-07-31 08:24:37

标签: c# quickfix fix-protocol

我在FromAdmin和FromApp中使用MessageCracker Crack(message, sessionId);(我使用的是quickfix / n的1.4版本,而消息破解者似乎也处理了管理消息,至少正确处理了重载的OnMessage(Quickfix.Fix44.Longon message, SessionID sessionid){})。

我的问题是:如果我没有为通过MessageCracker的所有传入消息重载所有OnMessage方法,那么会出现某种“catch-all-other”消息方法,该方法将被调用无法转发到的传入消息一个重载的OnMessage方法?我不想让QuickFix发送消息拒绝只是因为,例如FIX服务器发送未处理的消息,但是,这可能对流程流不是必不可少的。我只是想自己处理它。我在try / catch中处理它感觉不舒服,因为我觉得这不是最干净的方法。

有什么建议吗?

由于

2 个答案:

答案 0 :(得分:2)

不,没有。

任何受人尊敬的FIX交易对手都会有一个规范,告诉您他们将发送给您的消息类型(以及这些消息可能包含哪些字段)。

因此,您应该知道需要支持的所有消息类型,并且可以为每个消息提供OnMessage调用。

您可以在调用crack()之前预先测试消息字符串的类型字段。这可行,但我认为这是误导。

答案 1 :(得分:1)

你可以认为try / catch是最干净的方法。

在内部,Crack()方法只搜索可以处理接收消息类型的方法(使用Reflection)。如果找不到,则抛出 QuickFix.UnsupportedMessageType异常

重要提示:QuickFix不会通过MessageCracker拒绝不支持的邮件,如果需要,您需要以编程方式拒绝它。

如果您有一个场景,您不知道对方将发送的所有消息,我看不到这两个选项:

  1. 要捕获UnsupportedMessageType异常并处理 消息字符串由你自己。
  2. 不要捕获异常,通过OnMessage事件忽略它